Java - 继承问题

Seg*_*ult 2 java inheritance

我有这两个班:

public class Superclass 
{
  public Superclass();

  ...

}
Run Code Online (Sandbox Code Playgroud)

public class ChildClass extends Superclass
{
  public ChildClass();

  public setname(String name)
  {
   ...
  }

}
Run Code Online (Sandbox Code Playgroud)

如果我这样做:

Superclass a;
a = new ChildClass();
a.setname("Roger");
Run Code Online (Sandbox Code Playgroud)

我收到此警告:方法setname(String)未定义类型Superclass.怎么解决?谢谢

And*_*mas 6

当您通过Superclass类型的引用调用方法时,您只能使用Superclass API.Superclass API不包含该方法setname().

你可以通过声明超类中的方法来解决这个问题.在这个例子中,它被声明为抽象,因此超类不需要定义它.

public abstract class Superclass 
{
  public Superclass();

  public abstract void setname(String name);
}
Run Code Online (Sandbox Code Playgroud)

或者您可以更改a子类的引用类型:

ChildClass a;
a = new ChildClass();
a.setname("Roger");
Run Code Online (Sandbox Code Playgroud)