Главная » Java, Web » Работа с объектами java

0

При программировании концепция объектной ориентированности может быть использована на различных уровнях. Наиболее распространенный подход состоит в том, что объектно-ориентированный метод используется на самых ранних этапах разработки программы, при этом применяется идея, состоящая в том, что все, что описывает программа, представляет собой объекты. Может быть использован и другой уровень применения объектно- ориентированной модели программирования. При этом ставится такая задача, решая которую, программист создает программное обеспечение, которое в дальнейшем может быть использовано во многих других проектах.

Встроенные классы

Объектно-ориентированное программирование предполагает, что будут конструироваться, разрабатываться и имплементироваться новые классы. При этом полезно использовать уже существующие классы. Разработчики Java предлагают богатый выбор классов, которые могут быть многократно использованы. Часть из этих классов используется как база для создания других классов на их основе. Другие классы используются для создания полезных объектов. Далее мы познакомимся с некоторыми из них.

Наследование. Полиморфизм. Абстрактные классы

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

Под наследованием понимается тот факт, что один класс может полностью или частично наследовать структуру и поведение другого класса. Тот класс, который наследует, называется подклассом по отношению к классу, от которого он наследует. Если класс в является подклассом класса а, то говорят, что а — это суперкласс для класса в. Можно также сказать, что класс а — это базовый класс или родительский класс. Подкласс может вносить изменения в наследуемые структуру и поведение.

При создании нового класса на Java мы имеем возможность использовать уже существующий класс (рис. П4.7). Если мы создаем класс в, который будет подклассом для класса а, то мы пишем

class В extends А {

// добавления и исправления

При помощи классов можно описать предметы из реальной жизни (рис. П4.9).

// для класса, унаследованного от класса А

Рис. П4.7. Класс В создается на основе класса А

У одного суперкласса может быть несколько подклассов. Такие подклассы могут быть названы смежными. Наследование может распространяться на несколько "поколений" классов (рис. П4.8).

Рис. П4.8. Один класс может быть суперклассом для нескольких подклассов

Рис. П4.9. Классы могут описывать реальные предметы

! Пример                                                                                                                                                    !

class Machina {

int registrationNumber; Person owner; // владелец

// предполагается, что существует класс Person void transferOwnership(Person newOwner) {

class Avtomobil extends Machina { int numberOfDoors;

class Tyagach extends Machina { int numberOfAxels;

class Motocikl extends Machina { boolean hasSidecar;

Существует правило, состоящее в том, что если переменная может хранить ссылку на объект класса а, то эта же переменная может хранить ссылку на любой объект, принадлежащий подклассу а. В следующем примере объект типа Avtomobil может быть присвоен переменной типа Machina.

Machina mojaMachina = mojAvtomobil; Machina moj aMachina = new Machina();

Можно осуществить проверку того, принадлежит ли тот или иной объект определенному классу. Такая проверка может выглядеть следующим образом:

if (mojAvtomobil instanceof Machina) …

Присваивание такого рода, как, например

mojAvtomobil = mojaMachina;

будет неправомерным, поскольку переменная mojaMachina потенциально может ссылаться на объект, тип которого отличен от типа объекта, ссылка на который содержится в переменной mojAvtomobil. Нельзя также присваивать значение типа Machina переменной, которая должна содержать значение типа Avtomobii, поскольку не всякая машина является автомобилем. Вот же решение существует. Можно применить приведение типов. Если по каким-либо причинам нам известно, что переменная mojaMachina в действительности содержит ссылку на объект класса Avtomobii, то мы можем произвести приведение типа, используя (Avtomobii) MojaMachina, тем самым мы сообщим компьютеру, что переменная mojaMachina содержит ссылку на объект типа Avtomobii. Мы можем написать так: mojAvtomobil = (Avtomobii)moyaMachina;

Затем мы можем обращаться к свойствам автомобиля, или же мы могли бы сразу указать так: ((Avtomobii)mojaMachina).numberOfDoors.

Все сказанное ранее суммируется в следующем примере:

System.out.println("Dannya Machiny:"); System.out.println("Registratsionnya Dannye: "

+ myVehicle.registrationNumber); if (myVehicle instanceof Car) { System.out.println("Tip machiny: Avtomobii"); Car c;

с = (Car)myVehicle;

System.out.println("Kolichestvo dverej: " + c.numberOfDoors);

}

else if (myVehicle instanceof Tyagach) {

System.out.println("Tip machiny: Tyagach"); Truck t;

t = (Truck) myVehicle;

System.out.println("Kolichestvo osej: " + t.numberOfAxels);

}

else if (myVehicle instanceof Motorcycle) {

System.out.println("Tip machiny: Motocikl"); Motorcycle m;

m = (Motorcycle)myVehicle;

System.out.println("Imeet Kolyasku: " + m.hasSidecar) ;

Источник: Будилов В. А. Интернет-программирование на Java. — СПб.: БХВ-Петербург, 2003. — 704 е.: ил.

По теме:

  • Комментарии