14-继承

为何需要继承

当需要编写两个类,pupil类与graduate类,但是两个类的属性与方法有很多相同的,怎么办?

Pupil类

package com.xbxaq.extend_;

public class Pupil {
    public String name;
    public int age;
    private double score;

    public void setScore(double score) {
        this.score = score;
    }
    public void testing(){
        System.out.println(name + " 小学生正在考试...");
    }

    public void show(){
        System.out.println("学生名" + name + ", age:" + age + ", 成绩:" + score);
    }
}

Graduate类

package com.xbxaq.extend_;

public class Graduate {
    public String name;
    public int age;
    private double score;

    public void setScore(double score) {
        this.score = score;
    }
    public void testing(){
        System.out.println(name + " 大学生正在考试...");
    }

    public void show(){
        System.out.println("学生名" + name + ", age:" + age + ", 成绩:" + score);
    }
}

Extend01类

package com.xbxaq.extend_;

public class Extend01 {
    public static void main(String[] args) {
        // 小学生
        Pupil pup = new Pupil();
        pup.name = "xbxaq";
        pup.age = 10;
        pup.testing();
        pup.setScore(60.5);
        pup.show();

        // 大学生
        Graduate gra = new Graduate();
        gra.name = "小白";
        gra.age = 19;
        gra.testing();
        gra.setScore(78.9);
        gra.show();
    }

}

概述

继承可以解决代码的复用,当多个类存在相同的属性(变量)和方法时,可以从这些类中抽象出父类。
在父类中定义这些相同的属性(变量)和方法,所有的子类不需要重新定义这些属性(变量)和方法,只需要通过extends来声明继承父类即可。

语法

class 子类 extends  父类 {

}
  • 子类会自动拥有父类中的属性(变量)和方法
  • 父类又被称之为超类、基类
  • 子类又被称之为派生类

示意图

修改后

student类

package com.xbxaq.extend_.improve_;

public class Student {
   public String name;
   public int age;
   private double score;

   public void setScore(double score) {
       this.score = score;
   }

   public void show(){
       System.out.println("学生名" + name + ", age:" + age + ", 成绩:" + score);
   }
}

Graduate类

package com.xbxaq.extend_.improve_;

public class Graduate extends Student{
    public void testing(){
        System.out.println(name);
    }
}

Pupil类

package com.xbxaq.extend_.improve_;

public class Pupil extends Student{
    public void testing(){
        System.out.println(name);
    }
}

Extend01类

package com.xbxaq.extend_.improve_;


public class Extend01 {
    public static void main(String[] args) {
        Pupil pup = new Pupil();
        pup.name = "小白学安全";
        pup.age = 12;
        pup.testing();
        pup.setScore(70.);
        pup.show();

        // 大学生
        Graduate gra = new Graduate();
        gra.name = "xbxaq";
        gra.age = 28;
        gra.testing();
        gra.setScore(88.9);
        gra.show();
    }
}

细节

  • 子类继承了父类的所有属性(变量)和方法,但是私有属性不能直接在子类中访问,要通过父类提供公共的方法去访问。
  • 子类必须调用父类的构造器,完成父类的初始化。
  • 当创建子类对象时,不管使用子类的哪个构造器,默认情况下总会去调用父类的无参构造器。如果父类没有提供无参构造器,则必须在子类的构造器中用super关键字去指定使用父类的哪个构造器完成对父类的初始化工作,否则编译不通过。
  • 如果希望指定去调用父类的某个构造器,则显式的调用。
  • super()在使用时,需要放在构造器的第一行。
  • super()和this 都只能放在构造器的第一行,因此两个方法不能共存在同一个构造器中。
  • Java所有类都是object类的子类。
  • 父类构造器的调用不限于直接父类!将一直往上追溯直到object类(顶级父类)。
  • 子类最多只能继承一个父类(指直接继承),既Java是单继承机制。
  • 不能滥用继承,子类和父类之间必须满足is-a的逻辑关系。
  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值