JAVA中的对象层次调用

JAVA中的对象层次调用,java,class,hierarchy,Java,Class,Hierarchy,我有一个关于对象层次调用的问题 我有四门课,即A、B、C、D D将设置为C;C将在B中;B将在A 如果我想在D班做点什么,我必须叫a.b.c.D.setWidth(“50%”);(a、b、c、d是类别a、b、c、d的实例) 那样打电话好吗?这会影响性能吗?对性能的影响很小。。。更大的问题是它对面向对象模型的影响 拥有对类成员的直接访问权是不受欢迎的,而且您面临着NullPointerException的风险 您更应该担心的是代码的可读性和可维护性。这样调用是完全合法的。我不认为它会有性能问题。

我有一个关于对象层次调用的问题

我有四门课,即A、B、C、D

D将设置为C;C将在B中;B将在A

如果我想在D班做点什么,我必须叫a.b.c.D.setWidth(“50%”);(a、b、c、d是类别a、b、c、d的实例)


那样打电话好吗?这会影响性能吗?

对性能的影响很小。。。更大的问题是它对面向对象模型的影响

拥有对类成员的直接访问权是不受欢迎的,而且您面临着NullPointerException的风险


您更应该担心的是代码的可读性和可维护性。

这样调用是完全合法的。我不认为它会有性能问题。 但是设计不好。 您应该在代码中使用getter和setter。 例如: 在您的例子中:
a.getB().getC().getD().setWidth(“50%”)

在类A中,将B的变量声明为private,与类B和C类似。
它将确保面向对象设计的数据隐藏和封装原则。

什么?它违反了一些OO原则(即数据隐藏),但从理论上讲,它的性能可能很好。。。不要那样做。首先让它工作,然后让它正确,然后让它快速。克努斯定律只是说不要跳过第一步和第二步。我担心可读性,还有空指针异常。我想的是,每个类中都会有很多变量。我不想为所有变量创建get/set。至少我可以为经常使用的变量创建它。您应该使用适当的OOP封装,并使用像Eclipse/IntelliJ、/IDEA这样的IDE,它将为您创建get*/set*方法。别偷懒!是 啊现在我明白了,我犯了一个大错误。原谅我,小鹅。如果它不会影响表演,那么我会照你说的做。这里与表演无关。这是关于你的要求。如果您有这样的需求,您将如何调用与在B中声明的C类中声明的d对象相对应的setWidth方法,以此类推。这是打电话的方式。它在java中被称为链接。