2008-11-06 6 views
112

두 개의 Java 클래스가 있습니다. B는 다른 클래스 A를 다음과 같이 확장합니다.Java에서 기본 클래스의 메서드는 파생 클래스의 재정의 메서드에서 어떻게 호출합니까?

class A { 
    public void myMethod() { /* ... */ } 
} 

class B extends A { 
    public void myMethod() { /* Another code */ } 
} 

B.myMethod()에서 A.myMethod()를 호출하고 싶습니다. 나는 C++ world에서오고 있으며 자바에서이 기본 작업을 수행하는 방법을 모른다.

답변

119

찾고 계신 키워드는 super입니다. 예를 들어 this guide을 참조하십시오.

+3

C++ 에서처럼 특정 조상 메소드를 호출 할 수 있지만 java가 아닌 것처럼 호출하면 체인 위로 전달할 수 있습니다. – rogerdpack

6

call super.myMethod();

111

그냥 super를 사용하여 호출하십시오.

public void myMethod() 
{ 
    // B stuff 
    super.myMethod(); 
    // B stuff 
} 
4

super 키워드를 사용하십시오.

14

super.MyMethod()class BMyMethod() 내부에서 호출해야합니다.

class A { 
    public void myMethod() { /* ... */ } 
} 

class B extends A { 
    public void myMethod() { 
     super.MyMethod(); 
     /* Another code */ 
    } 
} 
3
super.baseMethod(params); 

전화를 슈퍼 키워드로 기본 방법을 다음과 각각의 PARAMS을 통과 그래서해야한다. 다음과 같이

15

대답은 다음과 같습니다

super.Mymethod(); 
super();    // calls base class Superclass constructor. 
super(parameter list);   // calls base class parameterized constructor. 
super.method();   // calls base class method. 
1
// Using super keyword access parent class variable 
class test { 
    int is,xs; 

    test(int i,int x) { 
     is=i; 
     xs=x; 
     System.out.println("super class:"); 
    } 
} 

class demo extends test { 
    int z; 

    demo(int i,int x,int y) { 
     super(i,x); 
     z=y; 
     System.out.println("re:"+is); 
     System.out.println("re:"+xs); 
     System.out.println("re:"+z); 
    } 
} 

class free{ 
    public static void main(String ar[]){ 
     demo d=new demo(4,5,6); 
    } 
} 
2
class test 
{ 
    void message() 
    { 
     System.out.println("super class"); 
    } 
} 

class demo extends test 
{ 
    int z; 
    demo(int y) 
    { 
     super.message(); 
     z=y; 
     System.out.println("re:"+z); 
    } 
} 
class free{ 
    public static void main(String ar[]){ 
     demo d=new demo(6); 
    } 
} 
7

난 당신이 자바 반사 메커니즘을 사용하여 그것을 할 수 있다고 확신합니다. 수퍼를 사용하는 것만 큼 간단하지는 않지만 더 많은 힘을줍니다.

class A 
{ 
    public void myMethod() 
    { /* ... */ } 
} 

class B extends A 
{ 
    public void myMethod() 
    { 
     super.myMethod(); // calling parent method 
    } 
} 
+0

이 코드에는 자바 리플렉션이 표시되지 않으며 다른 코드와 동일한 코드입니다 . 더 많은 답변이 있습니까? –

1

통해 UR 초기화 이러한 방법 다음 클래스 A의 생성자를 사용하여 클래스 B의 생성자 내부에 슈퍼 키워드를 통과를 사용하는 경우

아니면 서브 클래스의 방법에서 슈퍼 클래스의 메소드를 호출 할 경우 그럼 당신은 하위 클래스 메서드 내에서 슈퍼 키워드를 사용해야합니다 : super.myMethod(); 당신이 상속 클래스의 기본 클래스 메서드를 호출 원한다면

3

참조, 여기 당신이 따라서 기본 클래스의 방법 중 하나를 무시하는 당신은 상속 된 클래스의 동일한 방법으로 슈퍼 키워드를 사용해야합니다.