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
      }
}

谢谢你的回复。现在我更明白了。谢谢你抽出时间。现在我更明白了。