Java 第一节课的帮助
我正在创建一些随机类来更好地理解多态性。 编码如下: Poly1: 第1款: 第2分段: testPoly: 但是程序没有通过编译阶段,因为每当我尝试从Java 第一节课的帮助,java,polymorphism,Java,Polymorphism,我正在创建一些随机类来更好地理解多态性。 编码如下: Poly1: 第1款: 第2分段: testPoly: 但是程序没有通过编译阶段,因为每当我尝试从SubPoly1或SubPoly2访问变量时,都会出现符号未找到错误(例如testObj[1]。x将返回错误) 任何帮助都将不胜感激 多态性在工业中的主要用途(面向对象编程理论)是属于不同类型的对象能够响应相同名称的方法、字段或属性调用,每个调用根据适当的特定类型行为进行响应 这里的关键字应该是同名 您可以修改示例,并在基类中包含一个方法,例如,
SubPoly1
或SubPoly2
访问变量时,都会出现符号未找到
错误(例如testObj[1]。x
将返回错误)
任何帮助都将不胜感激
多态性在工业中的主要用途(面向对象编程理论)是属于不同类型的对象能够响应相同名称的方法、字段或属性调用,每个调用根据适当的特定类型行为进行响应
这里的关键字应该是同名
您可以修改示例,并在基类中包含一个方法,例如,public void sayHello()
。子类从基类继承时,可以响应sayHello
,但如果它们自己没有实现此方法,则会将调用分派到超类“sayHello
。如果子类自己实现自己的sayHello
方法,就会发生多态性
如果你选择更多的口语例子,也许你会发现更容易熟悉这个概念。多态性的一个突出例子是形状:你有一个可能的抽象的基本形状和不同的子类,例如一条线、一个矩形、一个圆等。现在每个形状都有一个draw
方法,但当然这些形状会使用不同的方法来绘制自己
一些出发点:
testObj
声明为Poly1[]
,而x
未在Poly1
中定义,而是在SubPoly2
中定义。在Poly1
参考上,您只能访问comPoly
要解决此问题,您需要将x
移动到Poly1
,或者使用SubPoly2[]
,或者对SubPoly2
进行Poly1
引用(仅当实例实际上是SubPoly2
时才可能)。最佳解决方案取决于功能需求
另见:
Poly1[]testObj=new Poly1[2]
这意味着无论您在该数组中放入什么,无论实际类型如何,都只能访问Poly1类的成员。多元论来自方法,而不是变量
例如:
public class X
{
public void foo()
{
System.out.println("hello from X");
}
}
public class Y
extends X
{
public void foo()
{
System.out.println("hello from Y");
}
}
public class Main
{
public static void main(final String[] argv)
{
final X[] array;
array = new X[2];
array[0] = new X();
array[1] = new Y();
System.out.println(array[0].foo());
System.out.println(array[1].foo());
}
}
将做您期望的事情。虽然多态性主要与方法相关,但这个概念也适用于实例变量。Java中不能有多态变量。
public class SubPoly1 extends Poly1 {
String testPoly;
}
public class SubPoly2 extends Poly1 {
int x;
}
public class testPoly {
public static void main(String[] args) {
Poly1[] testObj = new Poly1[2];
testObj[0] = new SubPoly1();
testObj[1] = new SubPoly2();
testObj[1].x = 1;
testObj[1].comPoly = 2;
System.out.println("Test Output : " + testObj[1].x+ " and " + testObj[1].comPoly);
testObj[0].testPoly = "Hello";
testObj[0].comPoly = 8;
System.out.println("Test Output : " + testObj[0].testPoly+ " and " + testObj[1].comPoly);
}
}
public class X
{
public void foo()
{
System.out.println("hello from X");
}
}
public class Y
extends X
{
public void foo()
{
System.out.println("hello from Y");
}
}
public class Main
{
public static void main(final String[] argv)
{
final X[] array;
array = new X[2];
array[0] = new X();
array[1] = new Y();
System.out.println(array[0].foo());
System.out.println(array[1].foo());
}
}