2014-07-13 5 views
1

자바로 추상적 인 클래스와 인터페이스를 자세히 이해하려고했습니다. 나는 추상 클래스와 인터페이스에서 동일한 서명 메소드를 오버라이드하고 구현하는 것과 관련하여 SO에서 몇 가지 질문을 읽었다.부모 클래스의 메소드 호출

참고 : One, 난 그냥 더 명확하게 개념을 배울 수있는 내 자신의 코드와 노력 그 후 Two

. 그럼 몇 가지 질문을 보았습니다 :

  1. 추상 클래스로 작성된 구체적인 방법은 무엇이라고합니까?
  2. I 사이에서 유형 변환이 가능합니까? 객체의 유형이 C 일 경우 가능합니까?

나는 아래의 코드로 시도 : 아래의 답변 중 하나의 제안으로 당

Q.3
추가

public class TestMethods { 

    public static void main(String[] args) { 
    C c1 = new C(); 
    c1.methodOne(); 
    c1.methodTwo(); 

    // Q.1 
    A c2 = new C(); 
    // HOW TO CALL METHOD IN CLASS A WITH c2 
    c2.methodOne(); // I want to call here methodOne() from A 

    // Q.2 
    I c3 = new C(); 
    A c4 = (A) c3; 
    // WILL THIS TYPE CASTING WORKS 
    // HOW TO CALL METHOD IN CLASS A WITH c4 
    c4.methodOne(); 
    c4.methodTwo(); 
    } 

} 

class C extends A implements I{ 

    @Override 
    public void methodTwo() { 
    System.out.println("Method Two in Concrete Class C"); 
    } 

    @Override 
    public void methodOne(){ 
    System.out.println("Method One in Concrete Class C"); 
    } 

} 


abstract class A{ 
    public void methodOne(){ 
    System.out.println("Method One in Abstract Class A"); 
    } 

    public abstract void methodTwo(); 
} 

interface I{ 
    public void methodOne(); 
    public void methodTwo(); 
} 

, 나는 클래스에서 super.methodOne()를 호출 할 수 있습니다 C. 그러나 만약 내가 구체적인 클래스 C에서 그 확장 부모 추상 클래스 A에서 구체적인 방법을 호출 슈퍼에서 전화가 없어? 그리고 콘크리트 클래스 C에 수정을 원하지 않으면 수퍼 클래스에서 메서드를 호출 할 수 있습니까?

+0

일부 코드를 사용해 보았지만 어떤 답을 찾지 못했는지 질문했습니다. –

답변

2
  1. 당신은 내가 다른 방법은 주위에 A와 C에 C 전송할 수 있습니다 super.methodOne()
  2. 와 구체적인 방법을 호출 할 수 있습니다 C는 A가 모든 것을 가지고 있지만 C는 그래서 좀 더 가질 수 있기 때문에 하지만 A는 C가 아닙니다.
+0

Q.1의 경우 -이 'super.methodOne()'을 어디에서 호출해야합니까? 왜냐하면'c2' 객체를 만든 후에 호출하기를 원하기 때문입니다. 나는'((A) c2) .methodOne()'을 호출하려고했지만 여전히'C'에서 메서드를 호출합니다. Q.2 내 질문은 '객체'가 'C'유형 인 경우 'A'의 참조로 'I'참조를 캐스팅 할 수 있습니까? –

+0

1. 클래스 C 안의 어느 곳에서나'super.methodOne()'를 호출 할 수 있습니다. 2. 가능 합니다만, A 형이나 C 형의 객체 일 것입니다. – Dima

+0

Ok. 나는'public void methodSuper() {super.methodOne();를 추가하려고 시도했다. }''안에'methodSuper()'를 호출하고,'A'의 참조를 사용하고 있기 때문에 객체의 타입이 'C'인데도 methodSuper()를 호출 할 수 없었습니다. –

관련 문제