面向对象特征二:继承(Inheritance)

继承的概述

生活中的继承

财产继承:

 

绿化:前人栽树,后人乘凉

 

绿水青山,就是金山银山”

样貌:

 继承之外,是不是还可以"进化":

 继承有延续(下一代延续上一代的基因、财富)、扩展(下一代和上一代又有所不同)的意思。

Java中的继承

角度一:从上而下

为描述和处理个人信息,定义类Person:

 为描述和处理学生信息,定义类Student

通过继承,简化Student类的定义

说明:Student类继承了父类Person的所有属性和方法,并增加了一个属性school。Person中的属性和方法,Student都可以使用。

角度二:从下而上

多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类中无需再定义这些属性和行为,只需要和抽取出来的类构成继承关系。如图所示:

继承的好处

  • 继承的出现减少了代码冗余,提高了代码的复用性。
  • 继承的出现,更有利于功能的扩展。
  • 继承的出现让类与类之间产生了is-a的关系,为多态的使用提供了前提。

             继承描述事物之间的所属关系,这种关系是:is-a 的关系。可见,父类更通用、更一般,子类更具体。

注意:不要仅为了获取其他类中某个功能而去继承!

继承的语法 

继承中的语法格式;通过 extends 关键字,可以声明一个类B继承另外一个类A,定义格式如下:

[修饰符] class 类A {
    ...
}

[修饰符] class 类B extends 类A {
    ...
}

继承中的基本概念

类B,称为子类、派生类(derived class)、SubClass

类A,称为父类、超类、基类(base class)、SuperClass

代码举例

/*
 * 定义动物类Animal,做为父类
 */
public class Animal {
    // 定义name属性
    String name;
    // 定义age属性
    int age;

    // 定义动物的吃东西方法
    public void eat() {
        System.out.println(age + "岁的"
                + name + "在吃东西");
    }
}
/*
 * 定义猫类Cat 继承 动物类Animal
 */
public class Cat extends Animal {
    int count;//记录每只猫抓的老鼠数量

    // 定义一个猫抓老鼠的方法catchMouse
    public void catchMouse() {
        count++;
        System.out.println("抓老鼠,已经抓了"
                + count + "只老鼠");
    }
}

测试类

public class TestCat {
    public static void main(String[] args) {
        // 创建一个猫类对象
        Cat cat = new Cat();
        // 为该猫类对象的name属性进行赋值
        cat.name = "Tom";
        // 为该猫类对象的age属性进行赋值
        cat.age = 2;
        // 调用该猫继承来的eat()方法
        cat.eat();
        // 调用该猫的catchMouse()方法
        cat.catchMouse();
        cat.catchMouse();
        cat.catchMouse();
    }
}

继承性的细节说明

子类会继承父类所有的实例变量和实例方法
子类不能直接访问父类中私有的(private)的成员变量和方法
在Java 中,继承的关键字用的是“extends”,即子类不是父类的子集,而是对父类的“扩展”
Java支持多层继承(继承体系)
一个父类可以同时拥有多个子类
Java只支持单继承,不支持多重继承
posted @ 2023-05-11 07:50  晓枫的春天  阅读(76)  评论(0编辑  收藏  举报