为什么导入 java.awt.* 也不会导入
java.awt.geom.*? java.awt.geom 中的所有内容不都在
java.awt?从包裹的名称来看,我会假设是这样。
软件包的名称具有误导性。它们被命名为java.awt 和java.awt.geom,但它们实际上是完全不同的包。在 Java 中并没有真正的“包层次结构”。
import java.awt.*;
导入java.awt 包内的所有类。因为java.awt.geom 是具有不同类的不同包,所以您也必须导入该包。分层名称主要用于组织!
直接访问实例变量很糟糕,我应该这样做
请改用访问器方法。这是为什么?只是约定俗成吗?
Sotirios Delimanolis 关于封装的说法很好,但我认为最好的解释是在面向对象编程中,程序员负责决定用户(或使用您的包的程序员)是什么允许处理类的成员变量。
这就是为什么约定成员变量private;存储在对象中的数据是对象 的责任,作为程序员,您的工作是确保通过您 定义的方法与该对象的接口正常工作。因此,如果您希望某人被允许直接更改对象中的数据,您可以创建一个set 方法来这样做。
考虑这样的事情:
Pizza myPizza = new Pizza(18) //18-inch pizza. Yum!
当我这样做时,披萨将计算其他变量成员,例如 numSlices(当前为 1,因为它未切割)和 pizzaLeft(即 (18/2)^2 * pi 英寸)。哪个更有意义?
myPizza.pizzaLeft -= 50; //50 inches of pizza eaten
myPizza.pizzaLeft; //returns about 204.47
或
myPizza.slice(8); // cut into 8 pieces which are about 32 square inches each
myPizza.eat(1); // eat one slice
myPizza.getPizzaLeft(); //returns about 222.47
由于您正在处理比萨饼,因此将其切成片并食用更有意义。 Pizza 对象本身将负责计算 pizzaLeft 或 slicesLeft 之类的变化,而与该类交互的那些则看不到它。
由于这个原因,成员变量通常设置为private,这意味着您必须使用访问器方法。
我希望这会有所帮助。