- 子类变量可以转换为它的任何超类吗?
- 可以为超类变量分配任何子类变量吗?
- 可以为超类分配任何变量吗?
- 如果是这样,可以为接口变量分配来自任何实现类的变量吗?
问问题
6684 次
5 回答
10
所有的狗都是动物吗?
所有的动物都是狗吗?
如果你需要一只动物,而我给你一只狗,那总是可以接受的吗?
如果你特别需要一只狗,但我给你任何动物,那会不会有问题?
如果您需要可以驾驶的东西,但您不在乎它是什么,只要它具有 .Accelerate 和 .Steer 之类的方法,您是否关心它是保时捷还是救护车?
于 2011-02-03T02:05:33.267 回答
7
- 是的
- 您可以将子类实例分配给超类变量
- 嗯?
- 您可以将类的实例分配给该类实现的任何接口类型的变量
于 2011-02-03T02:02:11.070 回答
3
为了清楚起见,请考虑:
class A extends B implements C { }
whereA
是子类,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();
于 2011-02-03T02:02:41.827 回答
0
子类变量可以转换为它的任何超类吗?
是的
并且可以为超类变量分配任何子类变量吗?
是的
可以为超类分配任何变量吗?
是的
如果是这样,可以为接口变量分配来自任何实现类的变量吗?
是的
于 2011-02-03T02:03:22.540 回答
0
是的,这通常是polymorphism的主要思想。
假设您有一些形状:圆形、方形、三角形。你会有:
class Shape { ... }
class Circle extends Shape { ... }
class Square extends Shape { ... }
class Triangle extends Shape { ... }
继承的思想是圆是一个形状。所以你可以这样做:
Shape x = ...;
Point p = x.getCenterPosition();
您不需要关心x
变量是哪种具体类型。
于 2011-02-03T02:06:21.270 回答