• 章节五、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。

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

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

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

    出现在同一个类中。

  • 相关阅读:
    事事浑不着意,总得有走心的地方
    Struts2框架概述
    java算法数据结构
    shell十三问(转)
    linux:将job放在后台执行的方法
    Python性能(转)
    python collections deque
    python中的参数传递和返回值
    python中的下划线
    python学习笔记glob模块
  • 原文地址:https://www.cnblogs.com/luohuasheng/p/9542065.html
Copyright © 2020-2023  润新知