面向对象特征二:继承(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只支持单继承,不支持多重继承