继承:将一些具有共同特征和功能的类型,重新归纳为一种新类型,叫继承。
子类可以继承父类中的一些成员变量和成员方法。子类也可已添加自己独有的成员变量和成员方法。
可以继承private修饰的方法,但是继承过来不可使用。
父类也叫超类和基类,子类也叫派生类。
利用关键字extends来继承语法。
eg:public class subClass extends SuperClass{
}
继承中的构造器:
子类不能继承父类中的构造器,但是子类可以调用父类中的构造器。
利用 super(有形参传实参) 可以调用父类中的构造器。目的是为了更好地给子类继承过来的成员变量赋值。父类先于子类初始化。
注意:如果父类中没有无参构造器,那么子类构造器中就必须显示调用父类中有参构造器
如果父类中有无参构造器,那么子类构造器中会隐式调用了父类中的无参构造器。
子类中的构造器一定会有一个调用了super()。其他子类构造器,可以用this()调用本类的构造器。
super()和this()的区别:
相同点:都是调用构造器,而且都必须放在首行首句。所以super() this() 不能出现在同一个构造器中。
不同点:super() 是调用父类中的构造器,this()是调用本类中重载的构造器。
继承具有传递性:
A类继承了B类 B类继承了C类, 那么A类中也会间接继承了C类中的特征。
继承是单向的,一个子类只能有一个父类,而一个父类可以有多个子类。
方法的重写(override) :
子类可以继承父类中的成员变量和方法,同时子类也可以编写与父类方法名相同,并且参数列表也相同的方法,就叫重写。
(1)在子类中重写的方法,与父类中方法的方法名相同,参数列表也相同。
(2)返回值类型可以相同,也可以不同。但是子类方法的返回值必须是父类方法的返回值类型的子类。
(3)修饰词可以不变,或者可以比父类的修饰权限更大。
父类型的变量可以引用子类型的对象(父类声明,子类实例化)也可以说是父类型的变量可以接受子类型对象的地址或者说父类引用指向子类对象。
如:Animal a = new goldFish();
Animal类型的变量a引用了子类型goldFish的对象。
父类声明,子类实例化的情况下:
静态方法编译和运行都看左边。
非静态方法编译看左边运行看右边。
编译期绑定:在编译过程中,变量只能调出本类型中的方法。在编译期间,方法静态绑定到变量上。
运行期绑定:在运行过程中,真正执行的方法逻辑是与对象的类型有关系。在运行期间,方法动态绑定到对象上。
成员变量的调用编译和运行都看左边