2015-01-15 2 views
4

그래서 나는 인터페이스가있는 Java 프로젝트를 이해하려고 시도하고있다. 클래스 A는 서브 클래스 B, C, D를 가지고있다. 각 클래스는 각각의 서브 클래스 수를 가지고있다.일부 하위 클래스를 구현하고 다른 하위 클래스를 구현하지 않겠습니까?

일부 하위 클래스는 주어진 수퍼 클래스를 확장하고 인터페이스를 구현하는 반면 일부는 상위 클래스를 확장하는 것으로 나타났습니다. 또한 클래스 B와 같은 하위 클래스 중 일부는 클래스 B 및 클래스 A에서 선언되고 인터페이스에서 사용되는 메서드를 선언합니다.

제 질문은 - 보조 서브 클래스에서 인터페이스를 구현하는 목적이 무엇입니까? 확장하면 슈퍼 클래스의 속성을 상속하고 인터페이스를 구현할 수 있습니까?

내 논리에 결함이있어 야하며 일부 보조 하위 클래스가 인터페이스를 구현한다는 사실 때문에 이유가 있어야한다는 것을 알고 있습니다.

여기에는 Idump를 구현하는 예제가 있지만, Idump를 구현하지 않는 dumpProperties 메소드도 포함 된 예제가 있습니다. :

public class Q extends B implements Idump { 
public void dumpProperties(StringBuffer buf) 
{ 
    String appearance = "1"; 
    String dumpValue = "Sizable"; 

    buf.append("\t\t\t//\n"); 
    buf.append("\t\t\t// " + name + "\n"); 
    buf.append("\t\t\t//\n"); 
    buf.append("\t\t\tthis." + (owner != null ? name + "." : "") + "Name = \"" + name + "\";\n"); 
} 


public class B extends A implements Idump { 
public void dumpProperties(StringBuffer buf) 
    { 
     super.dumpProperties(buf); 
     for(Control control : controls) 
     { 
      control.dumpProperties(buf); 
     } 
    } 
} 


public class A implements Idump{ 
public void dumpProperties(StringBuffer buf) 
    { 
     buf.append("\t\t\t//\n"); 
     buf.append("\t\t\t// " + name + "\n"); 
     buf.append("\t\t\t//\n"); 
     buf.append("\t\t\tthis." + (owner != null ? name + "." : "") + "Name = \"" + name + "\";\n"); 
     for(Property prop : properties) 
     { 
      prop.dump(buf); 
     } 

     if(left != -1 && top != -1) 
     { 
      buf.append("\t\t\tthis." + name + ".Location = new System.Drawing.Point(" + left + "," + top + ");\n"); 
     } 
     if(width != -1 && height != -1) 
     { 
      buf.append("\t\t\tthis." + name + ".Size = new System.Drawing.Size(" + width + "," + height + ");\n"); 
     } 

     for(Property prop : properties) 
     { 
      prop.dumpProperties(buf); 
     } 
    } 
} 

어떤 도움을 주시면 감사하겠습니다!

+0

[관련 질문] (http://programmers.stackexchange.com/q/179952/82853) on Programmers SE. 기본적으로 의미가 그럴 수 있습니다. – ajp15243

+1

미래에'A '가'Idump'를 구현할 필요가 없다는 것을 누군가가 결정할 수 있다고 생각합니다. B가'Idump' 메쏘드의 구현을 가지고 있지만 누군가가'A에서'Idump'를 제거하면 B가'Idump'를 구현하지 않는다면'B'가 깨질 것입니다. 그러나 이것은 중요한 디자인 변경이 될 것이기 때문에 꽤 명백한 이유처럼 보입니다. 게다가'B'가 구현하는 메소드에'@Orride' 주석을 사용한다면, 컴파일러는 그것을 어쨌든 잡을 것입니다. – ajb

답변

2

하위 클래스가 명시 적으로 구현을 포함하지 않으면 해당 하위 클래스가 해당 구현을 상속합니다. 이는 명시 적으로 구현 한 다른 하위 클래스가 부모로부터 구현을 재정의한다는 것을 의미합니다 (이 내용은 Polymorphism).

마찬가지로 모든 하위 클래스는 인터페이스를 구현하는 것으로 표시되는지 여부에 관계없이 해당 '수퍼 클래스가 구현하는 인터페이스를 상속합니다. 그것은 스타일과 가독성 결정입니다.

+0

감사합니다. 고마워요! – HavelTheGreat

2

컴파일러에 관한 한 아무런 차이가 없습니다. 가독성을 이유로 마커 종류로는 interface을 사용할 수 있습니다.

관련 문제