java中不同类对象的数组
我试图创建一个不同对象的数组,并为单个对象调用类方法java中不同类对象的数组,java,inheritance,polymorphism,Java,Inheritance,Polymorphism,我试图创建一个不同对象的数组,并为单个对象调用类方法 class A { int ID, String name, public int getID() { return ID; } public void setID(int id { ID = id; } } class B extends A { string name; public string getName() {
class A
{
int ID,
String name,
public int getID()
{
return ID;
}
public void setID(int id
{
ID = id;
}
}
class B extends A
{
string name;
public string getName()
{
return name;
}
public void setName(string n)
{
name = n;
}
}
class Implement
{
public static void main(string[] args)
{
A[] a1 = new A[2];
a1[0] = new B();
a1[1] = new B();
a1[0].setID(123);
a1[0].setName("John"); //Error
}
}
我无法访问B类方法。有谁能帮助我理解为什么它不允许我访问,以及如何实现这一点。。。谢谢你的帮助。。
谢谢与
setID
不同,A
没有setName
方法,因此该方法没有多态性 这是因为a[0]
的引用类型属于父类a
,其中未定义方法setName
。为了能够调用setname
,您可以将a[0]
强制转换为键入B
,因为编译器认为列表中的每一项“都是”a,因为您将a1声明为a的列表。您只能调用属于a的方法。假设列表的第三项是类型a,那么您将永远无法对其调用setname()。现在,如果您确定列表的第一项是a B,您可以将其转换为:
((B)a1[0]).setName("name");
如果确实要使用多态性,则需要在父类(A)上定义setName()。然后,所有子级都可以重新定义setName()的作用 代码中有几个语法错误。另外,您正在创建类型为
A
的数组,并且setName
的类型为B
。更新代码如下:
class A
{
int ID;
String name;
public int getID()
{
return ID;
}
public void setID(int id)
{
ID = id;
}
}
class B extends A
{
String name;
public String getName()
{
return name;
}
public void setName(String n)
{
name = n;
}
}
class Implement
{
public static void main(String[] args)
{
B[] a1 = new B[2];
a1[0] = new B();
a1[1] = new B();
a1[0].setID(123);
a1[0].setName("John");
}
}
复制代码,而不是重新键入。这里有很多打字错误。 使用以下命令:
class Implement
{
public static void main(String[] args)
{
A[] a1 = new A[2];
a1[0] = new B();
a1[1] = new B();
a1[0].setID(123);
((B)a1[0]).setName("John"); //No error
}
}
谢谢你的回复。现在我更明白了。谢谢你抽出时间。现在我更明白了。