我的导师发布了一个示例中期供我们做,我对以下问题感到困惑:
显示没有子类型的继承和没有继承的子类型的示例。
我们使用以下定义,并且使用 Java 进行编程:http ://www.cmi.ac.in/~madhavan/courses/pl2006/lecturenotes/lecture-notes/node28.html
代表这两个想法的好方法是什么?
我的导师发布了一个示例中期供我们做,我对以下问题感到困惑:
显示没有子类型的继承和没有继承的子类型的示例。
我们使用以下定义,并且使用 Java 进行编程:http ://www.cmi.ac.in/~madhavan/courses/pl2006/lecturenotes/lecture-notes/node28.html
代表这两个想法的好方法是什么?
根据列出的子类型定义:
子类型是指接口的兼容性。如果可以在 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
}
在这里,bothBird
和Fish
不恰当地继承自FlyingFish
,即使它们都不Bird
是Fish
飞鱼的子类型。
希望对您有所帮助,如果您有任何后续问题,请发表评论。此外,一本可能值得您阅读的书是Effective Java 2nd Ed。乔什·博赫。在这本书中,布洛赫就这些主题提供了一些非常棒的内容。