1、继承是多态的前提,没有继承就没有多态
解决的问题:共性抽取。父类(基类、超类)// 子类(派生类)
特点:1、子类可以拥有父类的“内容” 2、子类还可以拥有自己专有的内容
2、子类就是父类(即:子类可当作父类看待)
父类就是普通类的定义格式;
子类:public class 子类名称 extends 父类名称 { }
3、在父子类的继承关系当中,如果成员变量重名,则创建子类对象时,访问有两种方式(就近原则):
直接:通过子类对象访问成员变量
等号左边是谁,就优先用谁,没有则向上找(比如父类与子类均有num成员变量,若teacher类(子类)对象te1.num 则代表teacher里的num而不是父类中的num)
间接:通过成员方法访问成员变量
该方法属于谁,则优先用谁,没有则向上找
4、三种变量重名(父类成员变量、子类成员变量、局部变量(方法中的变量))
num;//局部变量 this.num; //子类成员变量 super.num; // 父类成员变量
5、在父子类的继承关系当中,创建子类对象,访问成员方法的规则:
创建的对象是谁,就优先用谁,没有则向上找
6、方法的重写(在继承关系关系中,方法名称一样,参数列表也一样)
重写(override):方法名称一样,参数列表也一样【覆盖、覆写】
重载(overload):方法名称一样,参数列表不一样。
特点:创建的是子类对象,则优先使用子类方法
注意:(1)必须保证父子类 方法名称一样,参数列表也一样
(2)@override 写在重写方法之前,用来监测是否正确重写
(3)子类方法的返回值必须小于等于父类的返回值范围 // Object类是所有类的公共最高父类
java.lang.String 是java.lang.Object的子类
(4)子类方法的权限必须大于等于父类方法权限修饰符:public > protected > default(留空)> private
7、方法的重写的应用
继承的设计原则:已经使用的类,尽量不要修改,定义一个新的类,重复利用其中共性内容,改动或者添加新内容。
public void method() {
super.method();// 父类的方法拿过来重复利用
// 子类再来添加更多内容
System.out.println("子类重名方法执行");
}
8、子类在继承父类之后,如果子类再写一个构造方法,则默认先构造父类,即super();(不同于上面的一般方法重写)
如:public Teacher() { // 子类构造方法
super();
......
}
9、子类构造可以通过super关键字来调用父类重载构造;(因为默认赠送的是super();无参构造,如果父类没有无参构造,则会error,只能手动写super(参数);
必须是子类构造方法的第一句;不能多次调用super构造;
10、super关键字:
(1)在子类的成员方法中,访问父类的成员变量
(2)在子类的成员方法中,访问父类的成员方法
(3)在子类的构造方法中,访问父类的构造方法 // super(); super(参数);
11、this关键字
(1)在本类的成员方法中,访问本类的成员变量
(2)在本类的成员方法中,访问本类的另一个成员方法
(3)在本类的构造方法中,访问本类的另一个构造方法 // this();this(参数);
注意:必须是第一句,且唯一一个。super与this两种构造调用,不能同时使用,比如有了this();之后,不再赠送super();
12、(1)Java语言是单继承的,一个类的直接父亲只能有唯一一个
class C extends A,B { } error
(2) Java语言可以多级继承
(3) 一个父类可以拥有多个子类