嵌套类中的类可访问性

时间:2017-11-21 13:35:47

标签: java

如何在不getBMW()private class Model公开的情况下访问位于class Car的方法class Model

class MyCar {
    public Car getCar() {
        return new Car();
    }

    private class Car {
        public Model getModel() {
            return new Model();
        }

        private class Model {
            public String getBMW() {
                //...
            }
            //...
        }
    }
}

class TestCode {
    public static void main(String arg[]) {
        MyCar car = new MyCar();
        car.getCar(). // <= no method getModel()
    }
}

2 个答案:

答案 0 :(得分:4)

您甚至无法从公共方法返回私有Car,但您可以创建一个界面:

public interface BmwModel {
    String getBMW();
}

public interface BmwModelProvider {
    BmwModel getModel();
}

class MyCar {
    public BmwModelProvider getCar() {
        return new Car();
    }

    private class Car implements BmwModelProvider {

        @Override
        public BmwModel getModel() {
            return new Model();
        }

        private class Model implemements BmwModel {

            @Override
            public String getBMW() {
                //...
            }
            //...
        }
    }
}

答案 1 :(得分:0)

我知道你想要这个模型,但也许这会有所帮助。

class MyCar {
    public Car getCar() {
        return new Car();
    }
    public Car.Model getModel() {
        return getCar().getModel();
    }

    public String getModelBMW() {
        return getModel().getBMW();
    }

    private class Car {
        public Model getModel() {
            return new Model();
        }

        private class Model {
            public String getBMW() {
                return "BMW";
            }
        }
    }
}

class TestCode {
    public static void main(String arg[]) {
        MyCar car = new MyCar();
        String model = car.getModelBMW();
    }
}

您必须为要访问的所有Model方法创建公共方法。