定义
就是子类继承父类的属性和行为,使得子类对象具有与父类相同的属性、相同的行为。子类可以直接 访问父类中的非私有的属性和行为。
格式
class 父类{
...
}
class 子类 extends 父类{
...
}
继承后的特点——成员变量
1、如果子类父类中出现重名的成员变量,创建子类对象有两种方式:
①直接通过子类对象访问成员变量:
创建的哪个类实例,就先用谁的成员变量,否则向上找。
②间接通过成员方法访问成员变量:
在哪个类创建的方法,就优先用谁的成员变量,否则向上找。
2、子父类中出现了同名的成员变量时,在子类中需要访问父类中非私有成员变量时,需要使用 super 关键字
本类的成员变量名:this.成员变量名
父类的成员变量名:super.成员变量名
class Zi extends Fu{
intnum=6;
public void show(){
System.out.println("Fu num"+super.num); //访问父类的非私有成员变量
System.out.println("Zi num"+this.num); //访问同类的成员变量
}
}
继承后的特点——成员方法
成员方法重名——重写(override)
**方法重写 :**子类中出现与父类一模一样的方法时(返回值类型,方法名和参数列表都相同),会出现覆盖效 果,也称为重写或者复写。声明不变,重新实现。
class Phone{
public void sendMessage(){
System.out.println("发短信");
}
public void call(){
System.out.println("打电话");
}
public void showNum(){
System.out.println("显示来电号码");
}
}
class NewPhone extends Phone{
//重写父类的来电显示号码功能,并增加自己的显示姓名和图片功能
@override //注解写在方法前,用来检测是不是正确的覆盖重写,如不是会报错
public void showNum(){
//调用父类已经存在的功能使用super
super.showNum();
//增加自己特有显示姓名和图片功能
System.out.println("显示来电姓名");
System.out.println("显示头像");
}
}
public class ExtendDemo{
public static void main(String[] args){
NewPhone np=new Newphone();
np.call();//调用父类继承来的方法
np.showNum();//调用重写的方法
}
}
注意事项
1、子类方法覆盖父类方法,必须要保证子类权限大于等于父类权限。
public>protected>default(默认为default)>private
2、 子类方法覆盖父类方法,函数名和参数列表都要一模一样。
3、子类方法覆盖父类方法,子类的返回值必须小于等于父类方法的返回值范围
eg:父类为object,子类可以为String。
继承后的特点——构造方法
-
构造方法的名字是与类名一致的。所以子类是无法继承父类构造方法的。
-
子类的构造方法中默认有一个 super() ,表示调用父类的构造方法,父类成员变量初始化后,才可以给子类使用。
格式:super(父类构造方法的参数)——》通过super在子类调用父类构造方法
总结:子类必须调用父类构造方法,不写赠送super(),写了则用写的指定super调用,super只能有一个,必须是第一条语句。
super关键字的用法
1、在子类的成员方法中,访问父类的成员变量
public void method(){
System.out.println(super.num);
}
2、在子类的成员方法中,访问父类的成员方法
public void method(){
super.method(); //访问父类的method方法
}
3、在子类的构造方法中,访问父类的构造方法
public Zi(){
super();
}
this关键字用法——用来访问本类内容
1、在本类的成员方法中,访问本类的成员变量(区分局部变量)
2、在本类的成员方法中,访问本类中的另一个成员方法
public void methobB(){
this.methodA();
System.out.println("BBB");
}
3、在本类的构造方法中,访问本类中另一个构造方法
public Zi(){
this(123); //本类的无参构造,调用本类的有参构造
}
public Zi(int n){
}
// this(...)构造方法调用必须是构造方法的第一个而且是唯一一个,super和this两种构造调用不能同时用
super和this的内存图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UelGVgtU-1597847721807)(D:\Java、学习\day09_继承、super、this、抽象类\参考\03-super与this的内存图.png)]
java 继承的三个特点
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hfo4h63K-1597847721809)(D:\Java、学习\day09_继承、super、this、抽象类\参考\04-Java继承的三个特点.png)]
构造方法的第一个而且是唯一一个,super和this两种构造调用不能同时用
#### super和this的内存图
[外链图片转存中...(img-UelGVgtU-1597847721807)]
#### java 继承的三个特点
[外链图片转存中...(img-hfo4h63K-1597847721809)]