Java:超类和子类 子类变量可以转换为它的任何超类吗? 可以为超类变量分配任何子类变量吗? 可以为超类分配任何变量吗? 如果是这样,可以为接口变量分配来自任何实现类的变量吗? 对 可以将子类实例分配给超类变量 嗯? 可以将类的实例分配给该类实现的任何接口类型的变量 对 可以将子类实例分配给超类变量 嗯? 可以将类的实例分配给该类实现的任何接口类型的变量

Java:超类和子类 子类变量可以转换为它的任何超类吗? 可以为超类变量分配任何子类变量吗? 可以为超类分配任何变量吗? 如果是这样,可以为接口变量分配来自任何实现类的变量吗? 对 可以将子类实例分配给超类变量 嗯? 可以将类的实例分配给该类实现的任何接口类型的变量 对 可以将子类实例分配给超类变量 嗯? 可以将类的实例分配给该类实现的任何接口类型的变量,java,variables,subclass,superclass,class-hierarchy,Java,Variables,Subclass,Superclass,Class Hierarchy,为了清楚起见,请考虑: 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... 一个类

为了清楚起见,请考虑:

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

为了清楚起见,请考虑:

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();
子类变量可以转换为任何类型吗 它的超类是什么

超类变量可以是吗 是否分配了任何子类变量

可以为超类分配任何 变量

如果是,接口变量是否可以 从任何 实现类

子类变量可以转换为任何类型吗 它的超类是什么

超类变量可以是吗 是否分配了任何子类变量

可以为超类分配任何 变量

如果是,接口变量是否可以 从任何 实现类


是的,所有的狗都是动物吗

所有的动物都是狗吗

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

如果你特别需要一只狗,但我给了你任何动物,那会有问题吗


如果你需要可以驾驶的东西,但你不在乎它是什么,只要它有加速和转向等方法,你在乎它是保时捷还是救护车

所有的狗都是动物吗

所有的动物都是狗吗

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

如果你特别需要一只狗,但我给了你任何动物,那会有问题吗


如果你需要可以驾驶的东西,但你不在乎它是什么,只要它有加速和转向等方法,你在乎它是保时捷还是救护车

是的,这通常是主要的想法

假设你有一些形状:圆形,正方形,三角形。你应该:

class Shape { ... }

class Circle extends Shape { ... }

class Square extends Shape { ... }

class Triangle extends Shape { ... }
继承的概念是一个圆就是一个形状。因此,您可以:

Shape x = ...;
Point p = x.getCenterPosition();

你不需要关心x变量是哪种具体类型。

是的,这通常是你的主要想法

假设你有一些形状:圆形,正方形,三角形。你应该:

class Shape { ... }

class Circle extends Shape { ... }

class Square extends Shape { ... }

class Triangle extends Shape { ... }
继承的概念是一个圆就是一个形状。因此,您可以:

Shape x = ...;
Point p = x.getCenterPosition();

您不需要关心x变量是哪种具体类型。

您应该明确区分变量和值的概念。就目前情况而言,你的问题非常令人困惑。你可能想仔细阅读反/协方差,因为如果你稍微改变你的问题,答案就会改变。通过阅读以下内容,您可以大致了解不同的答案:您应该明确区分变量和值的概念。就目前情况而言,你的问题非常令人困惑。你可能想仔细阅读反/协方差,因为如果你稍微改变你的问题,答案就会改变。通过阅读以下内容,您可以大致了解不同的答案:我认为超类不能分配任何变量,只能分配一个兼容类型的变量。第二个问题是超类实例是否可以分配给子类变量,答案肯定是否定的。@Mark:问题不清楚。我乐观地选择了答案为肯定的解释。我认为超类不能分配任何变量,只能分配一个兼容类型的变量。第二个问题是超类实例是否可以分配给子类变量,答案肯定是否定的。@Mark:问题不清楚。我乐观地选择了已被接受的解释
回答是肯定的。您不能将超类实例分配给子类变量。@马克,也许我误解了这个问题。它不是说给一个超类变量分配一个子类变量吗?e、 g.ArrayList myArrayList=;List myList=myarraylisty您不能将超类实例分配给子类变量。@请注意,可能我误解了这个问题。它不是说给一个超类变量分配一个子类变量吗?e、 g.ArrayList myArrayList=;列表myList=myArrayList