Java继承的相关知识点

定义

就是子类继承父类的属性和行为,使得子类对象具有与父类相同的属性、相同的行为。子类可以直接 访问父类中的非私有的属性和行为。

格式

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。

继承后的特点——构造方法

  1. 构造方法的名字是与类名一致的。所以子类是无法继承父类构造方法的。

  2. 子类的构造方法中默认有一个 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)]

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值