2011-02-15 3 views
1

나는 초보자입니다. 죄송합니다 ..이 Java 상속 연습을 어떻게 해결할 수 있습니까?

나는이 운동을 해결하기 위해 내 뇌를 괴롭 히고 있습니다.

도움이 될 것입니다.

당신에게 대단히 감사합니다

는 ................................................. .....................................

Java에서 MyBaseClass라는 두 클래스를 정의하십시오. 및 MyDerivedClass.

이전 클래스는 매개 변수가없고 정수 값을 반환하는 meth()라는 보호되고 추상 메서드를 선언합니다.

후자 클래스는 첫 번째 연장하고 값 5

를 반환함으로써 상속 된 메소드를 구현 ........................ ...............................

내 구현은 (내가 잘못 알고 있지만 모르겠다. 이유 :) :

public MyBaseClass { 

    protected abstract meth(); 
    return(); 
} 

public MyDerivedClass extends MyBaseClass { 

meth(); 
return (5); 

} 

답변

2

구현시 Java의 기본 원칙이 부족합니다. Java에서 메소드/클래스를 선언하는 방법을 먼저 연구해야합니다. 어떻게 OOP

public MyDerivedClass extends MyBaseClass { 
    @Override 
    protected int meth() { 
     return 5; 
    } 
} 
+0

MyBaseClass abstract를 직접 인스턴스화 할 수 없도록 선언해야합니까? Object로서의 용도는 없습니다. – ComethTheNerd

+1

감사합니다. 먼저 변수 타입 int를 잊어 버렸습니다. 두 번째로 저는 meth 메소드를 오버라이드하려고 할 때 큰 실수를 저질렀습니다. @Override는 필수입니까? – QJ746

+0

아니요, 정상적인 테스트에 추가 된 정적 검사입니다 (오타를 피하는 것). – Jack

5

이 이해의 큰 부족 같은 소리 클래스가 포함 할 수있는 무엇을 :

추상 클래스 :

public abstract MyBaseClass { 
    protected abstract int meth(); 
} 

하위 항목 클래스는 그러나 여기에 올바른 솔루션입니다 일반적으로 작동합니다. 클래스 내부에는 메서드 및 변수가 있으며 코드 문이 아닙니다.

분명히 meth();은 기능에 대한 호출입니다. 당신을 위해 무엇을 찾고있는 추상 메소드를 구현하는 것이지만 :

public abstract class MyBaseClass { 
protected abstract int meth(); 
} 

public class MyDerivedClass extends MyBaseClass { 
protected int meth { return 5; } 
} 

봐 : 모든 클래스는 { }와 함께 서명 (. 예를 들어 protected int meth())에 의해 정의되는 메소드의 목록과 너무 몸이 포함 된 몸을 둘러싸 (abstract 제외). 변수도 허용됩니다.

하지만 IMHO에서는 상속을 파하기 전에 OOP 기본 사항 및 프로그래밍 기본 사항을 배우는 데 더 집중해야합니다. 자바와 같은 완전한 객체 지향 프로그래밍 언어에서는 구문이 메서드 본문 밖에있을 수 없습니다.

+1

protected abstract meth(); 보호되어야한다 abstract int meth(); –

1
public abstract class MyBaseClass{ 

protected abstract int meth(); 


} 

public class MyDerivedClass extends MyBaseClass{ 

protected int meth(){ 
return 5; 
} 

} 
+0

코드가 맞습니까? MyBaseClass는 abstract로 선언되어야 meth() 메소드가 MyDerivedClass 내부에서 호출 될 수 있습니다. 올바른 것인가? 따라서 무시 무시한 작업이 수행되지 않을 수도 있습니다. 올바른지? – QJ746

+0

대답 1/2 : 기본적으로 무언가가 추상적 인 경우 직접 사용할 수 없기 때문에이 경우 MyBaseClass 유형의 객체는 추상 형식이므로 만들 수 없습니다. 그러나 추상이 아니기 때문에 MyDerivedClass의 객체를 만들 수 있습니다. 또한 meth() 메서드에 대한 구현을 제공하므로 메서드를 MyDerivedClass 개체에서 호출 할 수 있습니다. – ComethTheNerd

+0

Reply 2/2 : 기본 클래스가 동일한 서명 (예 : meth())의 메소드를 구현하고 파생 클래스에서 meth() 구현을 사용하도록 컴파일러에 알리고 싶으면 파생 클래스에서 @Override를 사용합니다 직접적인 하위 클래스로서 상속받은 수퍼 클래스 meth()가 아닙니다. – ComethTheNerd

관련 문제