2013-09-26 2 views
0

У меня есть два довольно элементарные вопросы, касающиеся Java:..Импорт пакетов и с помощью переменных экземпляра

Прежде всего, почему это, что импорт java.awt * не импортировать java.awt.geom * ? Не все внутри java.awt.geom внутри java.awt? Я бы предположил так, судя по названию пакета.

Во-вторых, мой профессор сказал мне, что этот проект для проектора прямоугольника напрямую связан с доступом к переменным экземпляра, и вместо этого я должен использовать метод accessor. Почему это? Это просто конвенция? Например:

Rectangle rectangle = new Rectangle(1, 2, 3, 4); 

int tallness = rectangle.height; //"bad" 

int tallness = rectangle.getHeight(); //"good" 

Оба они действительны и делают то же самое, насколько я понимаю. Единственное отличие состоит в том, что первый чувствует себя быстрее.

Кроме того, почему аксессуар появляется как орфографический орфографический запрос на этом сайте? (Или, может быть, проверка орфографии Chrome)

ответ

0

Почему он импортирует 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, что означает, что вы должны использовать метод доступа.

Надеюсь, это поможет.

+0

Значит ли это, что переменные экземпляра в классе Rectangle были общедоступными? –

+0

Если вы можете манипулировать ими таким образом: int tallness = rectangle.height; Тогда да, они были объявлены публичными. Обычно они должны быть закрытыми, заставляя вас использовать: int tallness = rectangle.getHeight(); –

0

Когда вы пишете java.awt.*, тогда он импортирует только классы, присутствующие внутри awt. Пакет Он не импортируется, если некоторые пакеты присутствуют внутри пакета awt. java.awt.geom в этом случае геометрии является другим пакетом, так, чтобы импортировать все классы, которые вы должны сделать java.awt.geom.*

нажмите here для получения дополнительной информации о пакетах

1

Прежде всего, почему это, что импорт java.awt . * также не импортирует java.awt.geom. *? Не все внутри java.awt.geom внутри java.awt?

No.

Чтобы получить все классы пакета GeoM вы должны написать java.awt.geom.*

мой профессор сказал мне для этого прямоугольника создатель проекта вещь, что доступ к переменным экземпляра непосредственно было плохо, и что вместо этого я должен использовать метод доступа.

Да, ваш профессор прав.

Причина является инкапсуляция данных,

  • механизм языка для ограничения доступа к некоторым из компонентов объекта.
  • Языковая конструкция, которая облегчает связывание данных с помощью методов (или других функций), работающих с этими данными.

Подробнее о Encapsulation

0
int tallness = rectangle.height; //"bad" 

int tallness = rectangle.getHeight(); //"good" 

Это происходит потому, что в последнем случае, другие программисты, использующие ваш код не сможет изменить значение rectangle.height путем присвоения ему случайное значение с помощью следующего кода rectangle.height= 5; как вы бы encapsulate переменная высота по геттер и setter методы, объявив его private.

Смежные вопросы