如何通过具体子类中的重写方法访问通过抽象类中的构造函数实例化的对象的属性?

时间:2017-07-29 22:08:15

标签: java oop

我是OOP的新手,正在通过练习,我提供了一个抽象类,并要求实现一个具体的子类,同时通过添加隐藏状态来修改抽象类。 / p>

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.areturn this.a之类的内容 - 当我尝试这样做时,编译器会抱怨它无法找到a。如果我在抽象类中有一个非抽象方法,我可以在我的具体(子)类中引用该方法,并访问我试图访问的属性。当然,我忽略了一些非常平庸的东西。提前感谢大家的共同智慧。

1 个答案:

答案 0 :(得分:0)

我已经做了一些更正来回答你的问题。

  • 班级名称以大写字母(约定)开头

  • 如果抽象类使用 this 引用ab,则还必须将这些变量声明为该类的成员。

    < / LI>
  • 构造函数的定义与类的名称相同。

扩展类时,扩展类将超类的成员变量作为自己的成员变量继承。因此,要从继承的类中引用ab,您只需编写a,b或this.a,this.b(this引用继承类的实例)。

如果继承的类能够只读取值或更改它将取决于它是否被声明为超类中的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;
    }
}