章节五、1-继承

一、继承概念

继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使的子类具有父类相同的行为。

二、首先新建一个父类,名为Cars

package introduction7;

public class Cars {
    int speed;
    //创建一个构造方法
    public Cars(int startSpeed) {
        speed = startSpeed;
    }
    
    //创建一个名为increaseSpeed的方法
    public void increaseSpeed() {
        speed++;
        System.out.println("cars 类的加速。。。");
    }
    
    //创建一个名为idcreaseSpeed的方法
    public void idecreaseSpeed() {
        speed--;
        System.out.println("cars 类的减速。。。");
    }
}

二、创建一个名为BMW的类,此类继承Cars,因此Cars是BMw的父类

package introduction7;

    //extends关键字:继承父类时使用
public class BMW extends Cars{
    public BMW(int startSpeed) {
    //super关键字,用于访问父类中的方法或变量
        super(startSpeed);
    }

    @Override
    public void increaseSpeed() {
        super.increaseSpeed();
    }
    
    public void hesdupDisplayBavigation() {
        System.out.println("bmw特有方法");
    }
}

此类中应用到两个关键字,extends和super:

extends表示继承,子类BMW继承了父类Cars中所有的方法和变量。

super关键字,用于访问父类中的方法或变量。

访问了父类中的构造方法,访问格式为:super(参数),实例如下(调用父类中的increaseSpeed方法):

public BMW(int startSpeed) {
    //super关键字,用于访问父类中的方法或变量
        super(startSpeed);
    }

在子类的构造方法的第一行都有一个默认的隐私语句super(),调用时必须写在子类构造方法的第一行,否则编译不通过;

super()是指对象,不可以在static环境中使用,包括:static变量,static方法,static语句块。

调用父类中的方法,变量,格式为:super.变量名,super.方法名(),实例如下(调用父类中的increaseSpeed方法):

  public void increaseSpeed() {
        super.increaseSpeed();
    }

eclipse中有一种可以直接调用父类方法中的功能,和前面直接调用get和set方法一样:

工具栏source---》Override/Implement Methonds...---》勾选要调用的父类方法,如下图:

调用后显示为:

 三、再新建一个类InheritanceDemo,方便演示:

package introduction7;

public class InheritanceDemo {

    public static void main(String[] args) {
        int speed = 0;
        //cars类自己对自己调用
        Cars c1= new Cars(speed);
        c1.increaseSpeed();
        
        
        BMW bmw1 = new BMW(speed);
        bmw1.increaseSpeed();
        bmw1.hesdupDisplayBavigation();
    }

}

打印结果为:

根据结果可见,BMW实例化的对象bmw1对方法increaseSpeed的打印和父类Cars中的方法IincreaseSpeed一致,打印的结果都为"Cars 类的加速",因此可见BMW成功调用的父类Cars的方法。

四、重写

子类在继承父类方法的同时,相对该方法中的功能做一些修改,此时就需要用到重写。

列如我们修改BMW中继承的父类方法,将原本打印输出为“Cars 类的加速”修改为打印“BMW加速”,修改如下:

打印结果为:

五、重写和重载的区别

重写(也可以叫方法覆盖):方法名相同,参数列表相同

一般在父类和子类当中,子类重写了父类的一个方法。

子类将父类继承过了的方法重新定义一次,重新填写方法中的代码。

不能改变父类方法中的返回值,如父类中返回是String,子类重写后想返回一个int,这样是不成功的,必须返回为String。

重写是子类的访问权限必须大于父类的访问权限。

如果父类方法抛出异常,那么在子类中重写父类的该方法也会抛出异常。

重载:方法名相同,参数列表不同。

出现在同一个类中。

原文地址:https://www.cnblogs.com/luohuasheng/p/9542065.html