tor*_*tal 2 java final abstract
我正在编写一个代表一些简单几何的Java类.
在最顶层的abstract类(它本身就是包私有)我声明了需要从同一个包中的子类访问的属性.
如果我宣布一个属性作为final中AbstractClass,
final int foo;
Run Code Online (Sandbox Code Playgroud)
我可以直接在包中访问它,而不用任何getter方法.然而.根据"praxis"(或我认为是常见的风格)做的将是:
private final int foo;
Run Code Online (Sandbox Code Playgroud)
这当然需要一个非private吸气者.子类必须引用foo(这是一个非常相关和典型的属性),好像它是一些外部对象:
this.getFoo();
Run Code Online (Sandbox Code Playgroud)
它添加了代码并删除了访问这些成员的直接方式(即foo).
跳过private修饰符是否有任何缺点,因为它们无论如何都是最终的,我不担心在包内部暴露这些属性?
我知道OO倡导者声称getter/setter是对象访问他们自己的属性的一种非常自然的方式 - 但是什么时候这会使任何非整形,非[插入任何JavaBeans风格的东西],差异?
考虑一个内部类,Coordinate它非常简单,因为它有两个int属性 - 保留类的所有用法OuterClass:
class OuterClass{
final static class Coordinate{
final int x, y;
Coordinate(int x, int y){
this.x = x;
this.y = y;
}
}
Coordinate coordinate;
}
Run Code Online (Sandbox Code Playgroud)
对于这个内部阶级 - 为什么我会为创造一个吸气剂的实践而烦恼?getter会引入更多代码并强制同一个包中的任何类调用coordinate.getX();而不是简单地调用coordinate.x;.这有任何开销吗?注意final类上的修饰符Coordinate.
getter的优点是将接口与实现分离.今天你getFoo可能只做返回foo,但是将来你可能想要远程foo成员并返回计算结果.获取者将允许您在不需要在每个呼叫站点进行更改的情况下执行此操作.