public class Home {

    public void getHomeDetails(){
        Rooms r = new Rooms();
        r.getRooms();
    }

    public class Rooms{
        public void getRooms(){
            System.out.println("20");
        }
    }
}



public class BigHome extends Home{

    public class Inner extends Home.Rooms{
        public void getRooms(){
            System.out.println("100");
        }
    }
}



public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        BigHome bigHome = new BigHome();
        bigHome.getHomeDetails(); // output:20 (Expecting 100)
    }

}


我有一个家庭教室,其内部教室房间可打印20。
另一个名为BigHome的类扩展了Home及其内部类。
但是当我在Main Class中启动BigHome时。我的输出为20(我原本希望为100)

如何调用BigHome类的getRoom函数?

最佳答案

BigHome没有bigHome.getHomeDetails();。方法,因此它使用使用家庭房间的Home类中的方法。您可以做的是设置2个类的构造函数,然后在这些构造函数中,设置要使用的Room类。喜欢:

public class Home
{
    Rooms r;

    public Home()
    {
        r = new Rooms();
    }

    public void getHomeDetails()
    {
        r.getRooms();
    }

    public class Rooms
    {

        public void getRooms()
        {
            System.out.println("20");
        }
    }
}

class BigHome extends Home
{
    public BigHome()
    {
        r = new Inner();
    }

    public class Inner extends Home.Rooms
    {

        public void getRooms()
        {
            System.out.println("100");
        }
    }
}


现在,Home和BigHome都负责指定他们要使用的房间。

摆脱继承的整个概念的另一种方法是,重写BigHome类中的getHomeDetails方法以设置BigHome正在使用的房间。

public void getHomeDetails()
{
    Inner.Rooms r = new Inner.Rooms();
    r.getRooms();
}


我不建议这样做。

10-08 12:20