저는 OOP를 처음 접했으며 추상 클래스를 제공하고 구체적인 하위 클래스를 구현하도록 요청하는 연습을 통해 작업 중이며 숨겨진 상태를 추가하여 추상 클래스를 수정합니다.
public abstract class someAbstractClass{
/* Constructor */
public New(String a, String b){
this.a = a;
this.b = b;
}
/* Abstract Getter 1 */
public abstract String geta();
/* Abstract Getter 2 */
public abstract String getb();
}
public class concreteClass extends someAbstractClass{
/* Constructor */
public New(String a, String b){
super(a,b);
}
/* Implementation of Getter 1 */
@Override
public String geta(){
// ???
}
/* Implementation of Getter 2 */
@Override
public String getb(){
// ???
}
}
위는 두 클래스를 단순화 한 것입니다. 내가 확신 할 수없는 것은 메서드가 수퍼 클래스에서 추상적 인 경우 구체적인 자식 클래스에서 두 개의 getter 메서드를 어떻게 정의 할 수 있습니까? 보다 구체적으로, 수퍼 클래스 생성자를 사용하여 객체를 인스턴스화 한 경우 객체의 속성을 어떻게 반환 할 수 있습니까?
나는 단순히 return super.a
또는 같은 말 return this.a
을 할 수 없습니다 a
. 그렇게하려고 할 때 컴파일러는 . 추상 클래스에 비추 상 메서드가 있다면 구체적인 (자식) 클래스에서 해당 메서드를 참조하고 액세스하려는 속성에 액세스 할 수 있습니다. 확실히 나는 매우 진부한 것을 간과하고 있습니다. 공유 된 지혜에 대해 미리 감사드립니다.
귀하의 질문에 대한 답변을 수정했습니다.
클래스 이름은 대문자로 시작합니다 (규칙).
추상 클래스 참조하는 경우 a
와 b
함께 이 , 또한 클래스의 구성원으로 그 변수를 선언한다.
생성자는 클래스의 동일한 이름으로 정의됩니다.
클래스를 확장 할 때 확장 된 클래스는 수퍼 클래스의 멤버 변수를 자신의 것으로 상속합니다. 따라서 참조 a
및 b
상속 된 클래스에서 a, b 또는 this.a, this.b ( this
withing 자체에서 상속 된 클래스의 인스턴스를 참조)를 작성할 수 있습니다 .
상속 된 클래스가 값을 읽을 수만 있거나 변경할 수있는 경우 수퍼 클래스 (이 경우 추상 클래스)에서 public, private 또는 (기본값) 보호 된 것으로 선언되었는지 여부에 따라 달라집니다.
public abstract class SomeAbstractClass{
protected String a;
protected String b;
/* Constructor */
public SomeAbstractClass(String a, String b){
this.a = a;
this.b = b;
}
/* Abstract Getter 1 */
public abstract String geta();
/* Abstract Getter 2 */
public abstract String getb();
}
public class concreteClass extends someAbstractClass{
/* Constructor */
public New(String a, String b){
super(a,b);
}
/* Implementation of Getter 1 */
@Override
public String getA(){
return this.a;
}
/* Implementation of Getter 2 */
@Override
public String getB(){
return this.b;
}
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다