Java学习 --- 继承

来源:互联网 发布:域名模糊查询 编辑:程序博客网 时间:2024/06/06 07:21

利用继承,人们可以基于已存在的类构造一个新类。继承已存在的类就是复用(继承)这些类的方法和域。在此基础上,还可以添加一些新的方法和域,以满足新的需求。
反射,反射是指在程序运行期间发现更多的类及其属性的能力。
“is-a”关系是继承的一个明显特征
关键字extends 表示继承
在Java中,所有的继承都是公有继承
关键字extends表明正在构造的新类派生于一个已存在的类。已存在的类称为超类,基类或父类;新类称为子类,派生类,或孩子类。
子类比超类拥有的功能更加丰富
覆盖方法,用一个新的方法来覆盖超类中某个不适用于子类的方法
使用特定的关键字super解决覆盖方法的问题
super与this引用的区别,super不是一个对象的引用,不能将super赋给另一个对象变量,它只是一个指示编译器调用超类方法的特殊关键字。
子类构造器
使用super实现对超类构造器的调用。使用super调用构造器的语句必须是子类构造器的第一条语句
如果子类的构造器没有显式地调用超类的构造器,则将自动地调用超类默认(没有参数)的构造器。如果超类没有不带参数的构造器,并且在子类的构造器中又没有显式地调用超类的其他构造器,则Java编译器将报告错误。
总结 关键字this 有两个用途:一是引用隐式参数,二是调用该类其他的构造器
关键字super 的两个用途:一是调用超类的方法,二是调用超类的构造器
继承层次
继承并不仅限于一个层次。由一个公共超类派生出来的所有类的集合被称为继承层次。在继承层次中,从某个特定的类到其祖先的路径被称为该类的继承链。
通常,一个祖先类可以拥有多个子孙继承链
多态
有一个用来判断是否应该设计为继承关系的简单规则,这就是“is-a”规则,它表面子类的每个对象也是超类的对象。
“is -a”规则的另一种表述法是置换法则。它表明程序中出现超类对象的任何地方都可以用子类对象置换。
在Java程序设计语言中,对象变量是多态的。一个超类变量既可以引用一个超类对象,也可以引用一个超类的任何一个子类的对象
不能将一个超类的引用赋给子类变量。
在Java中,子类数组的引用可以转换成超类数组的引用,而不需要采用强制类型转换。

阻止继承:final类和方法
希望阻止人们利用某个类定义子类。不允许扩展的类被称为final类
使用final修饰符
类中的特定方法被声明为final,那么子类就不能覆盖这个方法
域也可以被声明为final。对于final域来说,构造对象之后就不允许改变它们的值了。不过,如果将一个类声明为final,只用其中的方法自动地成为final
将方法或类声明为final主要目的是:确保它们不会在子类中改变语义。
如果一个方法没有被覆盖而且很短,编译器就能对它进行优化处理,这个过程称为内联

为了提高程序的清晰度,包含一个或多个抽象方法的类本身必须被声明为抽象的。
除了抽象方法之外,抽象类还可以包含具体数据和具体方法。
抽象类还可以包含具体数据和具体方法
建议尽量将通用的域和方法(不管是否是抽象的)放在超类(不管是否是抽象类)中。
抽象方法充当着占位的角色,它们的具体实现在子类中。扩展抽象类可以有两种选择。一种是在抽象类中定义部分抽象类方法或不定义抽象类方法,这样就必须将子类也标记为抽象类:令一种是定义全部的抽象方法,这样一来,子类就不是抽象的了。
类即使不含抽象方法,也可以将类声明为抽象类。
抽象类不能被实例化。也就是说,如果将一个类声明为abstract,就不能创建这个类的对象。
可以定义一个抽象类的对象变量,但是它只能引用非抽象子类的对象。

原创粉丝点击