目录
一、 概念
继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。继承使用extends关键字。格式为:
访问权限修饰符 class 子类 extends 父类{
... //类体
}
二、作用
通过继承可以快速创建新的类,避免了代码重复、代码量大且臃肿,实现代码的重用,提高程序的可维护性,节省大量创建新类的时间,提高开发效率和开发质量。
三、 继承的特性
1)子类继承了所有的属性和方法,非私有的属性和方法可以在子类直接访问,但是私有属性和方法不能再子类直接访问,要通过公共的方法去访问。
public void showInfo(){ //子类无法直接获取父类的属性,需要通过父类提供的get()和set()方法去修改和获取 System.out.println("姓名:"+this.getName()); }
2)子类必须调用父类的构造器,完成父类的初始化。
public Cat() { super(); System.out.println("我是子类的无参构造器"); }
public Pet() { System.out.println("我是父类的无参构造器"); }
public class Test { public static void main(String[] args) { //创建子类对象 Cat cat = new Cat(); } }
3)当创建子类对象时,不管使用子类的哪个构造器,默认情况下,总会去调用父类的无参构造器。如果父类没有提供无参构造器,则必须在子类的构造器中用super去指定使用父类的哪个构造器完成对父类的初始化工作。否则编译不会通过。
public Cat() { super();// 调用父类Pet类里的无参构造方法,可以不写,不写系统会自动调用父类无参构造方法 }
4)如果希望指定去调用父类的某个构造器,则显示的调用一下:super(参数列表)
public Cat(String name, int health, int love, String color) { super(name, health, love);//指定父类构造器调用 this.color = color; }
5)super在使用时,必须放在构造器第一行。
public Cat() {
super();//第一行
}
public Cat(String name, int health, int love, String color) {
super(name, health, love);//第一行
this.color = color;
}
6)super()和this()都只能放在构造器第一行,因此这两个方法不能共存一个构造器。
7)java所有类都是Object类的子类,Object是所有类的基类。
8)父类构造器的调用不限于直接父类,将一直往上追溯到Object类(顶级父类)。
9)子类只能继承一个父类(直接继承),即单继承机制。
10)不能滥用继承,子类和父类必须满足is-a的关系
四、 super和this关键字
super:
1)表示子类对父类对象的引用
2)super只能出现在子类的方法和构造方法中
3)super调用构造方法时,只能是第一句
this:
1)表示对当前对象的引用
2)它在构造器内部使用时,表示该构造器正在初始化的对象。
3)this调用构造方法时,只能是第一句