Java的继承

面向对象第二大特征:继承

1.什么是继承?

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

  继承的本质是对某一批类的抽象。

  继承是类与类之间的关系。

 

2.继承关系的两个类:

  1)基类:父类

  2)派生类:子类

例如生活中的例子:

 

兔子和羊都属于食草动物,狮子和豹属于食肉动物,食草动物和食肉动物又都属于动物

虽然食草动物和食肉动物都是属于动物,但是两者的属性和行为上有差别,

因此,羊和兔子,狮子和豹 都会继承动物类(父类)的一些属性和方法,但也会具有各自食草动物类、食肉动物类的特性。

 

3.继承的表示方式

 用extends关键字来表示子类继承父类。

   例如:父类Person

class Person{

}

子类Student 继承父类Person,表示方法如下:

class Student extends Person{

}

 

4.为什么需要继承?

  假设有两个类,Student和Teacher:

  Student属性(姓名,年龄) 方法(说话,学习)

  Teacher属性(姓名,年龄) 方法(说话,教书)

 

 Student类代码

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

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

    public void say(String name){
        System.out.println(name + "说话!");
    }

    public void study(String name){
        System.out.println(name + "学习!");
    }
}

Teacher类代码

public class Teacher {
    private String name;
    private int age;

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

    public void say(String name){
        System.out.println(name + "说话!");
    }

    public void teach(String name){
        System.out.println(name + "教书!");
    }
}

我们看到Student和Teacher类中的姓名、年龄这些属性 和  方法say是重复了,这样每个类代码重复且臃肿,维护性不高,因此我们可以从这2个类再进行抽象,抽象成一个Person类,把公共部分提取出来。

Person类代码

public class Person {
    private String name;//把Student、Teacher类的name抽象
    private int age;//把Student、Teacher类的age抽象

    //父类的构造器
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    //把Student、Teacher类的方法抽象成父类的方法say()
    public void say(){
        System.out.println(name + "说话!");
    }
}

Student类代码

public class Student extends Person {
   public Student(String name,int age) {
        super(name, age);//用关键字super调用父类的构造方法
    }

    public void study(String name){
        System.out.println(name + "学习!");
    }
}

Teacher类代码

public class Teacher extends Person {
    public Teacher(String name,int age){
        super(name, age);//用关键字super调用父类的构造方法
    }

    public void teach(String name){
        System.out.println(name + "教书!");
    }
}

我们用一个Test类  来测试代码

public class Test {
    public static void main(String[] args) {
        Student student = new Student("小明",23);
        Teacher teacher = new Teacher("王老师",39);

        student.say();//继承父类Person的方法say()
        teacher.say();//继承父类Person的方法say()

        student.study("小英");//自身类的方法
        teacher.teach("李老师");//自身类的方法
    }
}

执行结果

 

 

5.继承说明

   Java只有单继承,不支持多继承,但可以有多重继承,即一个子类,只有一个父类,一个父类,可以有多个子类。

 

 

 

6.继承特性

  1)在Java中所有的类都默认直接或间接继承Object类,例如我们在idea 开发工具中 ,可以看到

 

  2)继承的子类拥有父类非 private 的属性、方法。

  3)子类可以拥有自己的属性和方法,即子类可以对父类进行扩展

  4)子类可以用自己的方式实现父类的方法。(方法重写rewrite)

  5)在idea中可以用快捷键ctrl+H 打开继承树,通过继承树我们可以看到类之间的层次关系,最高的父类是Object

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2020-11-22 17:31  Danny·茄子  阅读(300)  评论(0)    收藏  举报