java

时间:2015-08-31 20:26:02

标签: 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()
    {
        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类方法。任何人都可以帮助我理解为什么它不允许我访问以及如何实现这一点...感谢你的帮助.. 感谢

5 个答案:

答案 0 :(得分:2)

setID不同,A没有setName方法,因此该方法没有多态性。

答案 1 :(得分:0)

这是因为a[0]的引用类型是parent class A,其中未定义方法setName。要致电setname,您可以将a[0]投射到B

类型

答案 2 :(得分:0)

因为编译器认为列表中的每个项目都是“A”,因为您将a1声明为A的列表。您只能调用属于A的方法。假设列表的第3项是A类型,那么你永远不能在它上面调用setName()。现在,如果您确定列表中的第一项是B,则可以投射它:

((B)a1[0]).setName("name");

如果您真的想使用多态,则需要在父类(A)上定义setName()。然后,所有孩子都可以重新定义setName()所做的事情。

答案 3 :(得分:0)

您的代码中存在多个语法错误。此外,您正在创建类型为AsetName类型为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");
    }
}

答案 4 :(得分:0)

复制代码而不是重新输入代码。这里有很多错别字。 使用此:

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