继承

继承

所谓继承是指一个类的定义可以基于另外一个已经存在的类,即子类基于父类,从而实现父类代码重用。子类能够吸收已有类的属性和行为,并能够扩展新的能力。

1. 继承的声明形式

[访问修饰符] [修饰符] class 类名 extends 父类{
    //代码    
}

public class Animal {
    private String name ; // 使用private修饰的内容无法被继承
    private int age ;
    
    public Animal() {}    // 构造方法无法被继承。
    
    //省略getter/setter方法
    
    public void eat() {
        //代码段        
    }
}

public class Dog extends Animal{
    
    public Dog(){}
}

2. 继承的执行顺序

main(){
    Dog dog = new Dog() ;    
}
  • 对dog对象进行实例化
  • 初始化父类中的所有全局变量
  • 调用父类的构造方法,并且实例化父类对象
  • 调用子类的构造方法,实例化子类对象

3. 继承的优点

  • 提高代码的复用性:多个类相同的成员可以放在同一个类中。
  • 提高了代码的可维护性:如果功能代码需要修改,只需要修改一处即可。
  • 让类与类之间产生了关系,是多态的前提

4. 继承的注意事项

  • 继承是单继承,不能够多继承关系
  • 实现多层继承,但是不建议大量使用
    • 子类只能继承父类所有非私有的成员(成员方法和成员变量)
    • 子类不能继承父类的构造方法,但是可以通过super关键字去访问父类构造方法。
    • 不要为了部分功能而去继承
    • 继承中类之间体现的是:”is-a”的关系和"has-a"关系。(…是…的一种)

5. super关键字

this关键字是指向于自身的一颗指针,能够获取当前对象的所有非静态成员。(成员变量以及成员方法)

super关键字是指向于父类的一颗指针,因此通过super无法访问本类中的非静态成员,可以通过super实现对父类非静态成员的调用,还能够通过super实现父类的构造方法调用。

//通过子类调用父类的构造方法
public Dog() {
    //在第一行写调用
    super() ;
}

public void show() {
    super.父类的字段[前提是非private]
    super.setter/getter方法
    super.方法() ;
}

super注意点:

1.super调用父类的构造方法,必须在构造方法的第一个
2.super必须只能出现在子类的方法或者构造方法中
3.super和this不能同时调用构造方法

Vs this:

代表的对象不同:
    this:本身调用这个对象
    super:代表父类对象的应用
前提:
    this:没继承也可以使用
    super:只能在继承条件下才可以使用
构造方法:
    this():本类的构造
    super():父类的构造

6. 方法覆盖\重写(Override)

子类可以重写父类中某一个方法,称为方法覆盖,也称方法重写,是继承中非常重要的知识点。如果子类需要修改从父类继承到的方法的方法体,就可以使用方法覆盖。

6.1 方法重写的特点:

  • 在子类中实现方法的重写(至少有两个类,而且是继承性关系)
  • 方法名、返回值、参数列表必须相同
  • 子类方法访问修饰符不能比父类的可访问权限更小 :public>protected>default>private
  • 子类不能够抛出比父类更多的异常
位置方法名参数表返回值访问修饰符
方法重写子类相同相同相同或是其子类不能比父类更严格
方法重载同类相同不相同无关无关

为什么需要重写:

1.父类的功能,子类不一定需要,或者不一定满足。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值