【发布时间】:2017-04-14 18:39:36
【问题描述】:
我正在尝试处理继承和接口,我有两个工作文件:
interface Speaker{
public String nameCalled();
public void describeSelf(String s);
public double randomIt(String s);
}
导入 java.util.Random;
public class testSample implements Speaker{
public String name1;
public String occ;
public testSample(String name1, String occ){
this.name1 = name1;
this.occ = occ;
}
public String nameCalled(){
return "My name is " + name1 + ".";
}
public void describeSelf(String s){
System.out.println("I, " + name1 + ", am a " + occ + ".");
}
public double randomIt(String s){
return Math.random() * s.length();
}
public static void main(String[] args){
testSample t = new testSample("John","student");
System.out.println(t.nameCalled());
System.out.println(t.randomIt("money"));
}
}
但是,有了这个:
public class testSample2 extends testSample implements Speaker{
String name;
public String nameCalled(){};
public void describeSelf(String s){
System.out.println("They call me " + name + ".");
}
public double randomIt(String s){
return Math.random() * s.length();
}
}
我的编译器说“发现 1 个错误: 文件:C:\Users\user\Desktop\testSample2.java [行:1] 错误:类 testSample 中的构造函数 testSample 不能应用于给定类型; 必需:java.lang.String,java.lang.String 发现:没有参数 原因:实际参数列表和形式参数列表的长度不同”
我希望 testSample2 从 testSample 继承变量,但输出不同。另外,接口的意义何在,如果在testSample上,我可以注释掉“implements Speaker”并且testSample仍然有效。
【问题讨论】:
-
提示:请阅读 java 命名约定。类名总是大写。并且:不要调用“testClass”... 对预期用途nothing 的东西。至少称它为 BaseTestClass,然后是 ExtendingTestClass 或类似的东西。
标签: java inheritance interface polymorphism