Java - 方法未被覆盖仍然没有显示错误

时间:2017-04-22 20:00:47

标签: java eclipse interface override

查看以下代码:

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类中显示错误。

一些屏幕截图:

enter image description here

人:

enter image description here

2 个答案:

答案 0 :(得分:1)

提供 setInfo,在这种情况下,不需要子类 {{1} (也是Student)来实现它(因为 继承 来自Person的方法)。

答案 1 :(得分:1)

简单:

人已经实现了该接口。完全,否则该课程需要是抽象的。

因此,当学生扩展人时,它会使所有方法无效。

这是OO和多态的本质:如果A扩展B,那么A B.没有“删除”实现提供的实现的概念超级。您可以通过覆盖来更改实现,但不能“撤消”它。

最后:您还想了解Liskov替换原则 - 了解如何以正确的方式覆盖。