2017-04-22 7 views
2

は、コードの以下の部分を見てください:のJava - メソッドがまだ上書きされていないエラーが表示されません

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

私の質問は、なぜ日食があればしかし、エラーがPersonクラスで示され、オペレーションインタフェースの一つでもメソッドがStudentクラスでオーバーライドされていないエラーが表示されないされているもの。ここ
package hellopackage; 

public interface Operations { 
    public int getAge(); 
    public String getName(); 
    public void setInfo(); 
} 

、メソッドは未実装のままです。

いくつかのスクリーンショット:

enter image description here

パーソン:

enter image description here

+0

ようこそスタックオーバーフロー!私は、このコードの95%があなたの質問に関連していないと思います。あなたの問題を示す[**最小**、完全で実証可能な例](http://stackoverflow.com/help/mcve)を作成してください。 –

+2

メソッドをオーバーライドしてもエラーが発生しないのはなぜですか?このメソッドは既に実装されています。 –

+0

@BoristheSpider setInfo()はStudentクラスで実装されていません –

答えて

1

シンプル:

Personはすでにそのインターフェイスを実装しています。完全にそうでなければ、クラスは抽象クラスである必要があります。

したがって、学生人を拡張するとき、それはすべての方法に内在します。

OOと多型の本質である:AがBを拡張する場合は、は、スーパークラスによって提供された実装を「削除」の概念がない B.です。オーバーライドを使用して実装を変更できますが、元に戻すことはできません。

最後に、正しい方法でオーバーライドする方法を理解するために、Liskov Substitution Principleについても読んでみたいです。

+0

良い説明、ありがとう –

1

クラスsetInfoを提供し、この場合にはする必要はありません(それはPersonからメソッドを継承するため)、それを実装するサブクラスStudentPersonもあります)。

+0

ええ!おかげで私はこれを持っている! –

関連する問題