keyword:
- 继承
- 方法重写
- final关键字
继承
继承是指子类可以继承父类的成员,并且可以使用。子类和父类之间通过关键字 extend 来产生继承关系。
特点:
-
继承的思想:将所有子类的共性功能,向上抽取到父类当中
-
继承的优点:提高了代码的复用性和维护性
-
继承的弊端:增加了耦合性
-
软件的设计原则:高内聚(一个类单独完成某个功能的能力),低耦合(一个类要完成某个功能,得去依赖某些类)
继承的注意事项:
-
Java中只支持单继承,但是支持多层继承。object是所有类的顶层父类,所有类都是直接或间接继承它
-
父类私有的成员,子类不能继承
-
构造方法不参与继承
-
不要为了部分功能而去继承,会增加耦合性
-
创建子类对象时,先去执行父类的空参构造(父类会比子类先初始化。因为子类会继承父类中的数据,可能还会使用父类的数据。所以,子类初始化之前,一定要先完成父类数据的初始化)
-
super是父类空间的一个标识,可以理解为父类的一个引用,可以用super去访问父类的数据(成员变量、成员方法、构造方法)
-
在每个类的构造方法的第一行,都会默认有super(),调用父亲的空参构造,先完成父类数据的初始化
假如父类里面没有提供空参构造怎么办
public class MyTest {
public static void main(String[] args) {
//Zi zi = new Zi();
//Zi zi = new Zi(1009);
假如我父类里面没有提供空参构造怎么办?
1.那子类可以去调父类有参构造
2.先用this(参数)本类的有参构造,然后你调用的那个构造又去调用父类的有参构造
//System.out.println(zi.num);
Zi zi = new Zi();
}
}
class Fu{
int num=10;
public Fu() {
super();
System.out.println("父类的空参构造执行了");
}
public Fu(int num) {
super();
this.num = num;
System.out.println("父类的有参构造执行了");
}
}
class Zi extends Fu{
int num=100;
public Zi() {
super(10);
// this(10000);
System.out.println("子类的空参构造执行了");
}
public Zi(int num) {
super(num);
System.out.println("子类的有参构造执行了");
}
}
方法重写
当子类出现了和父类一模一样的方法(方法名,参数列表,返回值类型一样)就会发生子类的方法覆盖父类的方法。
特点:
-
作用:如果子类对父类的方法不满意,那么子类就可以覆盖它,或者说,子类想要对父类的方法实现功能拓展,也可以使用方法重写
-
@Override:注解。可以检测此方法是否是重写父类的方法
-
静态成员方法不发生重写
-
父类私有的方法,子类无法重写
-
子类在重写父类方法时,权限修饰符不能比父类的低,要比父类的高或者一样(最好一样,修饰符大小比较:public > protected >
默认 > private)
- 静态方法不算重写
final
最终的,可以修饰变量,类,成员方法。
final修饰特点:
-
修饰变量,此变量为自定义常量
-
修饰类,此类不能被继承
-
修饰方法,此方法不能被重写,子类可以原封不动的继承下去用
-
修饰基本数据类型,此值不能再改变
-
修饰引用数据类型,此地址值不能再改变