1
  1. 子类变量可以转换为它的任何超类吗?
  2. 可以为超类变量分配任何子类变量吗?
  3. 可以为超类分配任何变量吗?
  4. 如果是这样,可以为接口变量分配来自任何实现类的变量吗?
4

5 回答 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

  1. 子类可以向上转换为任何超类。

    B b = new A();
    
  2. 超类不能向下转换为任何子类(这是不合理的,因为子类可能具有超类没有的功能)。你不能这样做:

    A a = new B(); // invalid!
    
  3. 超类可以分配给任何适当类型的变量。

    A q = new A(); // sure, any variable q or otherwise...
    
  4. 可以将类分配给其实现的接口之一类型的变量。

    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 回答