继承
继承是Java中实现代码重用的重要手段之一。使用继承,可以减少代码量,方便修改代码。Java中只支持单根继承,即一个类只能有一个直接父类。
继承使用关键字extends,让一个类和另一个类建立起父子关系。
// 编写父类
[访问修饰符] class Pet {
//公共的属性和方法
}
// 编写子类,继承父类
[访问修饰符] class Dog extends Pet {
//子类特有的属性和方法
}
符合is-a关系的设计使用继承
一、super
子类访问父类成员使用super 关键字,super 代表父类对象。
1.构造方法
访问父类构造方法,在子类构造方法中调用且必须是第一句
class Parent {
Parent(int x) {
System.out.println("Parent constructor with x: " + x);
}
}
class Child extends Parent {
Child(int x) {
super(x); // 调用父类构造函数
System.out.println("Child constructor");
}
}
2.属性
访问父类属性,不能访问父类中定义为private 的属性
class Parent {
int num = 10;
}
class Child extends Parent {
int num = 20;
void printNum() {
System.out.println(num); // 子类的num
System.out.println(super.num); // 使用super访问父类的num
}
}
3.方法
访问父类方法,不能访问父类中定义为private 的方法
class Parent {
void display() {
System.out.println("Display from Parent");
}
}
class Child extends Parent {
void display() {
super.display() // 调用父类的display方法
System.out.println("Display from Child");
}
}
二、规则
继承条件下构造方法的调用规则
- 系统默认调用父类的无参构造方法
- 子类构造方法通过super 显式调用父类的有参构造方法。执行父类相应构造方法,而不执行父类无参构造方法
- 子类构造方法通过this 显式调用自身的其他构造方法,在相应构造方法中应用以上两条规则
三、继承权限
-
继承public 和protected 修饰的属性和方法,不管子类和父类是否在同一个包里
-
继承默认权限修饰符 修饰的属性和方法,但子类和父类必须在同一个包里
-
不能被继承的父类成员:private成员;子类与父类不在同包,使用默认访问权限的成员;构造方法