继承( inherit)
概述:
- 继承是面向对象三大特征之一,可以使子类具有父类的属性和方法,还可以在子类中重新定义,追加属性和方法
- 格式:public class 子类名 extends 父类名{}
- 父类也称为 基类、超类
- 子类也称为 派生类
- 子类必须调用父类的构造器,完成父类的初始化
- 创建子类对象时,默认情况下会去调用父类的无参构造器
- 如果父类没有提供无参构造器,则必须子类的构造器中用super去指定使用父类哪个构造器完成对父类的初始化工作,否则编译不通过
- super()在使用时需放在构造器第一行
- super()和this()只能放在构造器第一行,因此这两个方法不能共存一个构造器
好处:
- 提高代码的复用性(多个相同的成员可以放到同一个类中)
- 提高代码的维护性(如果方法代码需要改,修改一处即可)
- 有利于功能扩展(子类继承父类就能得到父类的功能)
弊端:
- 让类与类之间产生了关系,类的耦合性增强了,当父类发生变化时子类实现也不得不跟着变化,
- 削弱了子类独立性
-
java中类只支持单继承或者多层继承
Super关键字
基本介绍
super代表父类的引用,用于访问父类的属性、方法、构造器
super用法和this相似
- this:代表本类对象的引用
- super:代表父类存储空间的标识(可以理解为父类对象引用)
this:
- 访问本类成员变量:this.成员变量
- 访问本类构造方法:this(…)
- 访问本类成员方法:this.成员方法
super:
- 访问父类成员方法:super.成员变量
- 访问父类构造方法:super(…)
- 访问父类成员方法:super.成员方法
继承构造方法访问特点:
- 子类中所有的构造方法默认都会访问父类的无参构造方法
- 子类会继承父类中的数据,可能还会使用父类中的数据,所以子类初始化前,一定先完成父类数据的初始化
- 每个子类构造方法的第一条语句默认都是:super()
如果父类中没有无参构造方法,只有带参构造方法:
- 在父类自己提供一个无参构造方法
- 通过使用super关键字去显示调用父类的带参构造方法
- [注意事项:java中类只支持单继承以及多层继承] :::
方法重写
概述:
-
应用:
当子类需要父类的功能,而功能主体子类有自己特有的内容时,可以重写父类中的方法,这样即沿袭了父类的功能,又定义了子类特有的内容
注意:
方法名,参数列表相同
- 返回值如果是基本类型,必须一样;如果是引用类型,子类可以是更小的类型
- 修饰符访问权限不小于被重写方法
-
@Override注解
加在重写方法上,可以检验重写格式 ::: ```java public class Test { public static void main(String[] args) {
Son son = new Son();
son.sTest();
} }
class Father { int i = 20;
public void c() {
System.out.println("父类方法");
}
}
class Son extends Father { int i = 30;
public void c() {
System.out.println("子类方法");
}
public void sTest() {
int i = 40;
System.out.println(i);
System.out.println(this.i);
System.out.println(super.i);
this.c();
super.c();
}
} ```