Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 嵌套类中的类可访问性_Java - Fatal编程技术网

Java 嵌套类中的类可访问性

Java 嵌套类中的类可访问性,java,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(); }

如何访问方法
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()
    }
}
classmycar{
公共汽车{
归还新车();
}
私家车{
公共模型getModel(){
返回新模型();
}
私有类模型{
公共字符串getBMW(){
//...
}
//...
}
}
}
类测试代码{
公共静态void main(字符串arg[]){
我的车=新的我的车();

car.getCar()。//您甚至不能从public方法返回private
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() {
                //...
            }
            //...
        }
    }
}

您甚至不能从public方法返回private
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() {
                //...
            }
            //...
        }
    }
}

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

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();
    }
}

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

我知道您需要该模型,但这可能会有所帮助

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();
    }
}

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

如果类型本身不可用,则调用方无法访问任何方法。尽管使用了反射,但这是不可能的。您必须将其设置为
公共
或任何适合您访问权限的修改器,或者设置
Car
作为一个单独的类,你可以访问外部世界需要知道Car是什么,然后才能使用它做任何事情。如果类型本身不是,你就不能让调用方访问任何方法。尽管使用了反射,我不建议这样做,但这是不可能的。你必须将它设置为公共的
或任何修改器适合您的访问权限,或者将
汽车
作为一个单独的类,您可以访问外部世界,需要知道汽车是什么,然后才能使用oneNot working执行任何操作。
无法解析符号“Model”
接口
在类之外,而
模型
不会退出。对,我没有注意到
模型
也是私有嵌套的。我已经做了更改,但是现在您可以看到公共方法
getBmw
已经用“BMW”污染了整个抽象接口结构。像个魔咒一样工作!谢谢!不工作。
无法解析符号“Model”
接口在类外,
模型
没有退出。对,我没有注意到
模型
也是私有嵌套的。我已经做了更改,但现在你可以看到公共方法
getBmw
已经污染了整个abs“BMW”的tract接口结构。工作得很有魅力!谢谢!这对我没有帮助。我有嵌套类,我的最终目标是拥有
car.getCar().getModel().getBMW()
。我尝试使用
interface
,但没有效果。这对我没有帮助。我有嵌套类,我的最终目标是拥有
car.getCar().getModel().getBMW()
。我试着使用
界面
,但没有效果。