Java复习笔记进阶02:继承

目录

1.继承是?

2.继承设计规范

3.继承内存原理

4.继承特点

4.1 是否可以继承父类私有成员

4.2 子类是否可以继承父类静态成员

5.继承后,成员变量和方法的访问特点

5.1如果子父类中出现重名成员,优先使用子类,一定要用父类怎么办?

6.继承后:方法重写

6.1@Override 重写校验注解

6.2 方法重写要求

7.继承后:子类构造器特点

7.1 原因

7.2 怎样调用父类构造器

8.继承后:子类构造器访问父类有参构造器

8.1 作用

8.2 父类只有有参构造器,没有无参会怎样

9.this和super


1.继承是?

  • extends关键字,可以使两个类建立父子关系

  • 子类(派生类),父类(超类,基类)

  • 作用:继承后,子类可以直接使用父类公共的属性和方法

  • 好处:提高代码复用性,增强类的功能扩展性

2.继承设计规范

子类相同特征(属性,方法)放在父类中,子类独有的自己所有

3.继承内存原理

  • new对象时,在堆内存开辟空间,同时含有父类空间和子类空间,初始化为null

  • 根据调用的成员变量和方法,选择父子空间执行

  • super指父类空间地址,this指子类对象地址;

4.继承特点

  • 子类可以继承父类属性和行为(方法),但不能继承父类的构造器;

    • 子类有自己构造器

  • java是单继承,只能继承一个直接父类;

  • java不支持多继承,但支持多层继承

  • java中所有类都是Object类的子类

    • 直接继承;默认继承;间接继承

4.1 是否可以继承父类私有成员

子类不可以直接访问父类私有成员;理论上可以继承;

4.2 子类是否可以继承父类静态成员

不算继承,只是共享使用;

5.继承后,成员变量和方法的访问特点

  • 就近原则

    • 先子类局部范围(方法内定义变量)找;

    • 子类成员范围找;

    • 父类成员范围找,找不到报错;

5.1如果子父类中出现重名成员,优先使用子类,一定要用父类怎么办?

可以通过super关键字,指定访问父类成员;

public void showName(){
    String name = "局部名";
    System.out.println(name);//局部
    System.out.println(this.name);//子类
    System.out.println(super.name);//父类
}

6.继承后:方法重写

6.1@Override 重写校验注解

class newPhone extends Phone{
    @Override //重写校验注解,方法必须是正确重写的,更安全;提高程序可读性
    public void call() {
        super.call();
        System.out.println("打视频电话!!");
    }
}

6.2 方法重写要求

  • 重写的方法名称,形参列表必须与被重写方法完全一致

  • 私有方法不能被重写(@Override报错)

  • 子类重写父类方法时,访问权限必须大于或者等于父类(private<缺省<protected<public)

  • 子类不能重写父类的静态方法,会报错

    • 重写,方法必须过继给子类,静态没有冲突

7.继承后:子类构造器特点

子类中所有构造器(有参无参)默认会先访问父类中无参构造器,再执行自己;

7.1 原因

  • 子类初始化,有可能用到父类中数据,如果父类没有完成初始化,子类将无法使用父类数据;

  • 子类初始化前,一定调用父类构造器先完成父类数据空间的初始化

7.2 怎样调用父类构造器

子类构造器第一行默认语句是:super();不写也默认存在

8.继承后:子类构造器访问父类有参构造器

8.1 作用

初始化继承自父类信息;

    public People(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public Student(String name, int age) {
        super(name, age);
    }

8.2 父类只有有参构造器,没有无参会怎样

报错:默认调用无参构造器,找不到

9.this和super

    public Student(String name) {
        //调用下方的双参构造器
        this(name,"灵术一中");
    }

    public Student(String name, String schoolName) {
        this.name = name;
        this.schoolName = schoolName;
    }

注意点:

  • 子类通过this调用本类其他构造器,本类其他构造器会通过super手动调用父类构造器,最终还是调用父类;

  • this和super()都只能放在构造器第一行,二者不能共存同以一个构造器中;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值