使用继承的可链接getter / setter的正确实现是什么? (JAVA)

时间:2014-02-16 21:58:10

标签: java inheritance chaining

我想在Java中编写一个类,它是一个父类,可以从子类中抽象出来。

我希望能够使用此代码,但我不确定Java是否无法实现。

Frodo frodo = new Frodo();
child.addGold(10).goToMordor();

但这个代码不安全吗?

public class Bilbo
{
    private int gold;

    public Parent()
    {
        // Does something awesome
    }

    public Bilbo addGold(int amount)
    {
        this.gold += gold;
        return this;
    }

    public int getGold()
    {
        return this.gold;
    }
}

// Child class:
public class Frodo extends Bilbo
{
    // Does cool stuff
    public void goToMordor()
    {
        System.out.println("Traveling to Mordor...");
    }
}

1 个答案:

答案 0 :(得分:1)

您的代码可以用Java编写,并且是安全的。虽然你在实施中看起来有点奇怪。考虑:

public class Parent{
    private String name;

    public Parent setName(String name){
        this.name = name;
        return this;
    }

    public String getName(){ return this.name;}

    public void print(){
        System.out.println("Say my name!");
    }
}

public class Child extends Parent{
    public void doChildStuff(){
        //child stuff.
    }

    @Override
    public void print(){
        System.out.println(this.getName());
    }
}

Child child = new Child();
//this works as Parent defines print, and setName returns a Parent object.
child.setName("Bill gates").print();

//Compile error, as setName returns Parent, and Parent does not define 'doChildStuff.`
child.setName("Bill Gates").doChildStuff();

你的方法很好,只要知道链接调用不适用于添加新方法的Parent的任何子类。