gpt4 book ai didi

java - 应该在哪里实例化内部类?

转载 作者:行者123 更新时间:2023-11-30 07:04:41 25 4
gpt4 key购买 nike

我见过两种实例化内部类的方法。例如

class OuterClass{
private int x = 23;

class InnerClass{
public void printX(){
System.out.println(x);
}
public void printStuff(){
System.out.println("This is an inner class method");
}

}
}

public class TestMain321{
public static void main(String[] args){
OuterClass o = new OuterClass();
OuterClass.InnerClass i = o.new InnerClass();
i.printX();
}
}

class OuterClass{
private int x = 23;
InnerClass i = new InnerClass();
public void innerMethod(){
i.printX();
}

class InnerClass{
public void printX(){
System.out.println(x);
}
public void printStuff(){
System.out.println("This is an inner class method");
}

}
}

public class TestMain123{
public static void main(String[] args){
OuterClass o = new OuterClass();
o.innerMethod();
i.printStuff();//WON'T COMPILE

}
}

第一个例子,我可以直接调用内部类方法,因为我在 main() 中实例化了内部类

OuterClass.InnerClass i = o.new InnerClass();
i.printX();

不同的是,在第二个例子中,我直接在外部类中实例化了内部类,所以稍后在 main 方法中我不能直接调用内部类的方法,因为它不知道引用.我必须创建一个外部类方法来调用内部类方法,例如查看外部类中的 innerMethod()。

public void innerMethod(){
i.printX();
}

还有什么其他原因可以让我采用一种方式而不是另一种方式?是否有关于如何做到这一点的最佳实践?

最佳答案

您的内部类应该始终是私有(private)的,以防止除外部类之外的外部访问。Effective Java Book 中提到了这一点还有这个question .

  1. “内部类的存在应该只是为了服务于它的外部类。”

如果您的内部类需要公开,请认真考虑将其设为普通类而不是内部类。

关于java - 应该在哪里实例化内部类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27395667/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com