查看以下代码:
Person.java :
package hellopackage;
public class Person implements Operations{
String name;
int age;
String hairColor;
String nationality;
public Person(String name, int age, String hairColor, String nationality) {
this.name = name;
this.age = age;
this.hairColor = hairColor;
this.nationality = nationalityn
}
@Override
public int getAge() {
// TODO Auto-generated method stub
return age;
}
@Override
public String getName() {
// TODO Auto-generated method stub
return name;
}
@Override
public void setInfo() {
// TODO Auto-generated method stub
}
}
Student.java
package hellopackage;
public class Student extends Person implements Operations {
String id;
double cgpa;
public Student(String name, int age, String hairColor, String nationality, String id, Double cgpa) {
super(name, age, hairColor, nationality);
this.id = id;
this.cgpa = cgpa;
}
public void setId(String newIdToSet) {
id = newIdToSet;
}
@Override
public int getAge() {
// TODO Auto-generated method stub
return age;
}
@Override
public String getName() {
// TODO Auto-generated method stub
return name;
}
/////a method is not overrided...still no error
}
接口..
Operations.java
package hellopackage;
public interface Operations {
public int getAge();
public String getName();
public void setInfo();
}
这里,我的问题是,为什么eclipse没有显示任何错误,即使在Student类中没有覆盖操作接口的一个方法,但是如果方法仍未实现,则会在Person类中显示错误。
一些屏幕截图:
人:
答案 0 :(得分:1)
父类提供 setInfo
,在这种情况下,不需要子类 {{1} (也是Student
)来实现它(因为 继承 来自Person
的方法)。
答案 1 :(得分:1)
简单:
人已经实现了该接口。完全,否则该课程需要是抽象的。
因此,当学生扩展人时,它会使所有方法无效。
这是OO和多态的本质:如果A扩展B,那么A 是 B.没有“删除”实现提供的实现的概念超级。您可以通过覆盖来更改实现,但不能“撤消”它。
最后:您还想了解Liskov替换原则 - 了解如何以正确的方式覆盖。