继承基础

作者: 大龙10 | 来源:发表于2022-05-12 05:55 被阅读0次

书名:代码本色:用编程模拟自然系统
作者:Daniel Shiffman
译者:周晗彬
ISBN:978-7-115-36947-5
目录

4.7 继承基础

1、泛型的动物类

  我们来看看另一个例子,这是一个由各种动物组成的世界,包括:狗(dog)、猫(cat)、猴子(monkey)、熊猫(panda)、袋熊(wombat)和水母(sea nettle)。

1)Dog类

从实现Dog类开始,一个Dog对象有年龄变量age(整数),还有eat()、sleep()和bark()函数(分别对应吃饭、睡觉和吠叫)。

class Dog{
    int age;
    Dog(){ 狗和猫都有相同的变量(age)和函数(eat()、sleep()
        age = 0;
    }
    void eat() {
        println("Yum!");
    }
    void sleep() {
        println("Zzzzzz");
    }
    void bark() { 狗会吠叫,所以还有个特殊的bark()函数
        println("WOOF!");
    }
}

2)Cat类

class Cat {
    int age;
    Cat() {
        age = 0;
    }
    void eat() {
        println("Yum!");
    }
    void sleep() {
        println("Zzzzzz");
    }
    void meow() {
      println("MEOW!");
    }
}

2、继承

  我们还要为鱼、马、考拉和狐猴分别写类重写同样的代码,这样的实现过程难免重复而单调。
  我们应该实现一个泛型的动物类(Animal)用于描述各种类型的动物。所有动物都会吃和睡,因此我们可以说:

  • 狗是动物的一种,它拥有动物的所有属性,动物能做什么,它就能做什么,除此之外,它还会吠叫;
  • 猫是动物的一种,它拥有动物的所有属性,动物能做什么,它就能做什么,除此之外,它还会喵喵叫。

  继承让上述需求的实现成为可能。
  通过继承,类可以从其他类中继承属性(变量)和功能(方法)。

  • Dog类是Animal类的子类,子类自动从父类中继承所有变量和函数,
    除此之外,子类还可以有父类没有的函数和变量。
  • 继承关系符合树形结构,就像是一棵不断演化的“生命之树”。
    比如,狗继承自犬类,犬类继承自哺乳动物,而哺乳动物则继承自动物。

3、继承的语法

class Animal { Animal类是父类(即超类)
    int age; Dog类和Cat类会继承age变量
    Animal() {
        age = 0;
    }
    void eat() { Dog类和Cat类会继承eat()和sleep()函数
        println("Yum!");
    }
    void sleep() {
        println("Zzzzzz");
    }
 }

class Dog extends Animal { "extends Animal"指Dog类是Animal类的子类
    Dog() {
        super(); super()函数执行父类中的代码
    }
    void bark() {
        println("WOOF!"); 我们在子类中定义bark()函数,因为它不是父类的一部分
    }
}

class Cat extends Animal {
    Cat() {
        super();
    }
    void meow() {
        println("MEOW!");
    }
}

这里有两个新关键字,如下。

  • extends 该关键词指出当前类的父类。注意,类只能直接继承一个父类,尽管如此,类的父类可以继承其他类。举个例子,狗继承自动物,梗犬则继承自狗。
    继承关系会自下而上一直延续下去。
  • super() 它会调用父类的构造函数。换句话说,你在父类的构造函数中做了什么,子类的构造函数也会做同样的事情。除了调用super()函数,你还可以在子类的构造函数中进行子类专有的初始化操作。
    如果父类的构造函数带有参数,super()函数也带有相同的参数。

4、定制

  • 子类可以拥有父类没有的功能和属性。
  • 如果狗对象的进食行为和一般动物不同,
    只需要在子类中重新定义eat()函数,把父类中的同名函数覆盖即可。
  • 但如果狗的进食行为和普通动物一样,仅仅是多了部分功能,这时候又该怎么实现?
    子类可以调用父类的函数,再加入属于自身的定制代码。

相关文章

  • 继承基础

    书名:代码本色:用编程模拟自然系统作者:Daniel Shiffman译者:周晗彬ISBN:978-7-115-3...

  • iOS动画

    一.CAAnimation 1.继承关系 CAAnimation继承关系 CABasicAnimation基础动画...

  • 接口的继承与抽象类

    接口继承 接口继承(inheritance)与类继承很类似,就是以被继承的 interface 为基础,增添新增的...

  • python零基础13:类的继承和定制

    类的定制和继承是什么? 类的继承 类的定制 类的继承要怎么写? 继承基础语法 继承之多层继承 继承的多重继承 类的...

  • 设计模式总结

    1、模式依赖基础与原则 1.1、基础 抽象,封装,多态,继承 1.2、原则 封装变化,多用组合、少用继承,针对接口...

  • 【文魁大脑实用记忆】王艺颖第18次《考研政治思修2》

    1.社会公德的特征 继承性、基础性、广泛性、简明性 继承---长了肚脐的橙子;基础--把信寄出(基础)去;广泛--...

  • Java 基础 - 继承

    参考 C++多继承有什么坏处,Java的接口为什么可以摈弃这些坏处?C++多继承(钻石继承)的问题和解决C++继承...

  • java基础-继承

    继承的概念 继承描述的是事物之间的所属关系,通过继承可以使多种事物之间形成一种关系体系。例如公司中的研发部员工和维...

  • java基础——继承

    现实生活中有继承的关系,Java中也有继承的关系,所以说,Java来源于生活。实际上,Java是一门比较容易学习的...

  • Java基础-继承

    1.什么是继承 把多个类中相同的成员给提取出来定义到一个独立的类中.然后让这多个类和该独立的类产生一个关系. 2....

网友评论

    本文标题:继承基础

    本文链接:https://www.haomeiwen.com/subject/hpfhurtx.html