概述:
是指子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
继承主要解决的问题就是:共性抽取
所谓的共性抽取可以理解为把两个或多个类中具有相同的属性定义为一个基类(父类)
两个或多个类中各自拥有的属性定义为派生类(子类)
继承关系中的特点
- 子类可以拥有父类的内容
- 子类还可以拥有自己的专有内容
继承的关键字 :extends
格式定义
- 父类定义
public class 父类名称 {
//定义的内容
} - 子类定义
public class 子类名称 extends 父类名称 {
//定义的内容
}
继承中成员变量访问特点
在父子类的继承关系中,如果成员变量重名,则创建子类对象时,访问有两种方式:
- 1:直接通过之类对象访问成员变量
等号左边是谁,就优先用谁,没有则向上查找 - 2:间接通过成员方法访问成员变量
该方法属于谁,就优先用谁,没有则向上查找
父类
public class Fu {
int numFu = 10;
int num = 100;
public void methodFu(){
System.out.println(num);
}
}
子类
public class Zi extends Fu {
int numZi = 20;
int num = 200;
public void methodZi(){
System.out.println(num);
}
}
调用
public class DemoExtends {
public static void main(String[] args) {
Fu fu = new Fu();//创建父类对象
System.out.println(fu.numFu);//只能使用父类对象,没有任何子类的内容
System.out.println("=============");
Zi zi = new Zi();
//子类和父类的对象都可以调用
System.out.println(zi.numFu);
System.out.println(zi.numZi);
System.out.println("=============");
//等号左边是谁,就优先用谁
System.out.println(zi.num);//子类优先,输出200,而不是父类的100
System.out.println("=============");
//这个方法是子类的,在子类方法中用到了num对象,优先用子类的num,没有再向上查找
zi.methodZi();//输出200
//这个方法是在父类中定义的,在父类方法中调用num对象,优先用父类的
zi.methodFu();//输出100
}
}
super关键字的三种用法
- 在子类的成员方法中,访问父类的成员变量
- 在子类的成员方法中,访问父类的成员方法
- 在子类的构造方法中,访问父类的构造方法
this关键字用法
- 在本类成员方法中,访问本类成员变量
- 在本类成员方法中,访问本类的另一个成员方法
- 在本类的构造方法,访问本类的另一个构造方法
继承的特点
- Java语言是单继承的,一个类的直接父类只能只有一个
- Java语言可以多级继承,比如A继承B,B继承C
- 一个子类的直接父类是唯一的,但一个父类也可以拥有很多个子类