Java:超类和子类

时间:2011-02-03 02:00:56

标签: java variables subclass superclass class-hierarchy

  1. 可以将子类变量强制转换为其任何超类吗?
  2. 是否可以为超类变量分配任何子类变量?
  3. 可以为超类分配任何变量吗?
  4. 如果是这样,接口变量是否可以从任何实现类中分配变量?

5 个答案:

答案 0 :(得分:10)

所有的狗都是动物吗?

所有动物都是狗吗?

如果你需要一只动物,我给你一只狗,这总是可以接受的吗?

如果你需要专门的狗,但我给你任何动物,那会不会有问题?

如果你需要一些可以驾驶的东西,但是你不关心它是什么,只要它有像.Accelerate和.Steer这样的方法,你关心它是保时捷还是救护车?

答案 1 :(得分:7)

  • 您可以将子类实例分配给超类变量
  • 咦?
  • 您可以将类的实例分配给该类实现的任何接口类型的变量

答案 2 :(得分:3)

为了清楚起见,请考虑:

class A extends B implements C {  }

A是子类,B是超类,CA实现的接口。

  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();
    

答案 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变量的具体类型。