在没有子类型的情况下没有继承和继承的子类型?

时间:2015-11-08 05:23:05

标签: java inheritance polymorphism subtyping

我的导师发布了一个示例期中考试,我对以下问题感到困惑:

显示继承的示例,不带子类型和没有继承的子类型。

我们使用以下定义,并且我们使用Java编程:http://www.cmi.ac.in/~madhavan/courses/pl2006/lecturenotes/lecture-notes/node28.html

表示这两个想法的好方法是什么?

1 个答案:

答案 0 :(得分:0)

根据列出的子类型定义:

  

子类型是指接口的兼容性。如果可以在类型B的对象上调用可以在类型A的对象上调用的每个函数,则类型B是A的子类型。

Java中的子类型基本上类似于在Java中扩展或实现接口。例如:

interface Fish {
    void swim();
}

interface FlyingFish extends Fish {
    void fly();
}

在这里,FlyingFishFish的子类型,因为飞鱼总是一种鱼类。

根据列出的继承定义:

  

继承是指重用实现。如果B的某些函数是根据A的函数编写的,则类型B继承自另一个类型A.

此定义继承是指Java中的实现继承。这通常也是一种子类型,但并不总是设计不良的分类法,你会在职业生涯中看到这些分类法。 ;-)例如:

class FlyingFish {
    void swim() {
        // implementation code to swim in water
    }

    void fly() {
        // implementation code to jump out of the water and fly
    }
}

class Bird extends FlyingFish {
    // no need to implement fly, reuse implementation of flying fish

    void swim() {
        // do nothing implementation - most birds can't swim.
    }
}

class Fish extends FlyingFish {
    void fly() {
        // do nothing implementation - most birds can't swim.
    }

    // no need to implement swim, reuse implementation of flying fish
}

此处,BirdFish都不恰当地从FlyingFish继承,即使BirdFish都不是飞鱼的子类型。< / p>

如果您有任何后续问题,希望有所帮助,发表评论。另外,一本值得您光顾的书是Josh Boch的 Effective Java 2nd Ed。。在这本书中,Bloch给出了一些非常好的内容。