我有一个2类,其中一个扩展了超类。 当我从主对象调用子类时,出现错误,因为“我调用的方法不是该类的一部分”,但是随着程序的进行,它应该可以工作 我只需要在课堂上使用铸件,但是我的老师告诉我,铸件不应该在这样的作品中使用,因此,我想了解我在哪里错了,哪里可以做得更好
(我提供了3个类,子类,超类和主要类的代码)
主要
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.print("Type in the number");
int number = in.nextInt();
System.out.print("Type in the name");
String name = in.next();
Test testObj = new Test(number);
testObj = new TestSub(number);
testObj.setNameSub(name);
in.close();
}
}
超一流
public class Test {
protected int number;
protected String name;
public Test(int number){
this.number=number;
}
public void setName(String name){
this.name=name;
}
public String toString(){
return "the name is "+name+"the number is "+number;
}
}
子类
public class TestSub extends Test {
public TestSub(int number){
super(number);
}
public void setNameSub(String name){
setName(name);
}
public String toStringSub(){
return toString();
}
}
我得到的错误是:
未为类型Test定义setNameSub(String)方法
在最主要的地方有此指令:testObj.setNameSub(name);
答案 0 :(得分:0)
这里的错误是(如注释中所示)您将testObj初始化为Test而不是TestSub,这导致当编译器无法在Test的方法之间找到setNameSub()时导致错误。
因此,简单的解决方案显然是将testObj初始化为TestSub。
利用方法继承的正确解决方案是保持初始化不变,而是调用方法testObj.setName(name),并从TestSub类中删除setNameSub()和toString()方法,因为它们与Test类中的方法没有任何区别。