答案 0 :(得分:10)
所有的狗都是动物吗?
所有动物都是狗吗?
如果你需要一只动物,我给你一只狗,这总是可以接受的吗?
如果你需要专门的狗,但我给你任何动物,那会不会有问题?
如果你需要一些可以驾驶的东西,但是你不关心它是什么,只要它有像.Accelerate和.Steer这样的方法,你关心它是保时捷还是救护车?
答案 1 :(得分:7)
答案 2 :(得分:3)
为了清楚起见,请考虑:
class A extends B implements C { }
A
是子类,B
是超类,C
是A
实现的接口。
子类可以向上转换为任何超类。
B b = new A();
超类不能向下转换为任何子类(这是不合理的,因为子类可能具有超类不具备的功能)。你做不到:
A a = new B(); // invalid!
可以将超类分配给任何适当类型的变量。
A q = new A(); // sure, any variable q or otherwise...
可以将类分配给其实现的接口之一的类型的变量。
C c = new A();
答案 3 :(得分:0)
可以将子类变量强制转换为any 它的超类?
是
超类变量可以 分配了任何子类变量?
是
可以为任何超类分配 变量?
是
如果是这样,接口变量可以是 从任何人分配变量 实施课程?
是
答案 4 :(得分:0)
是的,这通常是主观点polymorphism。
假设你有一些形状:圆形,方形,三角形。你有:
class Shape { ... }
class Circle extends Shape { ... }
class Square extends Shape { ... }
class Triangle extends Shape { ... }
继承的想法是圆是一个形状。所以你可以这样做:
Shape x = ...;
Point p = x.getCenterPosition();
您无需关心x
变量的具体类型。