Почему он импортирует 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 говорит о инкапсуляции была хорошо, но я считаю, что лучшее объяснение состоит в том, что в объектно-ориентированном программировании, вы-The-программист несет ответственность за принятие решения, что пользователь (или программист, используя ваш пакет) является разрешено использовать с переменными-членами класса.
Именно поэтому принято принимать переменные-члены private
; данные, хранящиеся в объекте, являются ответственностью objet, и это ваша работа в качестве программиста, чтобы убедиться, что сопряжение с этим объектом с помощью методов вы правильно определяете работу. Поэтому, если вы хотите, чтобы кто-то был , разрешил, чтобы напрямую изменить данные в объекте, вы можете сделать способ 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
Так как вы имеете дело с пиццей, он делает больше смысла просто нарезать ломтиками и едят кусочки. Сам объект пиццы будет отвечать за вычисления изменений в таких вещах, как pizzaLeft
или что-то вроде slicesLeft
, а те, которые взаимодействуют с классом, не видят этого.
Именно по этой причине переменные-члены обычно устанавливаются на private
, что означает, что вы должны использовать метод доступа.
Надеюсь, это поможет.
Значит ли это, что переменные экземпляра в классе Rectangle были общедоступными? –
Если вы можете манипулировать ими таким образом: int tallness = rectangle.height; Тогда да, они были объявлены публичными. Обычно они должны быть закрытыми, заставляя вас использовать: int tallness = rectangle.getHeight(); –