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