1

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

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

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

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

4

1 回答 1

0

根据列出的子类型定义:

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

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

interface Fish {
    void swim();
}

interface FlyingFish extends Fish {
    void fly();
}

在这里,FlyingFish是一个子类型,Fish因为飞鱼始终是鱼的一种。

根据列出的继承定义:

继承是指实现的重用。如果 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 fish can't fly.
    }

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

在这里,bothBirdFish不恰当地继承自FlyingFish,即使它们都不BirdFish飞鱼的子类型。

希望对您有所帮助,如果您有任何后续问题,请发表评论。此外,一本可能值得您阅读的书是Effective Java 2nd Ed。乔什·博赫。在这本书中,布洛赫就这些主题提供了一些非常棒的内容。

于 2015-11-09T20:49:53.623 回答