3.5 Наследование (часть 2)

3.5.5 Преобразование типа

Java, будучи строгим языком типов, проверяет совместимость типа (если тип может заменяться другим типом в данном контексте) в определённое время. Однако, некоторые проверки возможны только во время выполнения. В этих случаях, Java требует использовать приведение типа, чтобы явно указать преобразование типа.
(<тип>) <выражение>

Следующая программа демонстрирует некоторые преобразования типов, которые требуют приведений:
Пример 10:
//Demonstrate casts
public class Conversion
{
public static void main(String[] args)
      {
byte b;
int i = 257;
double d = 323.142;
System.out.println( nConversion of int to byte );
b = (byte)i;
System.out.println( i and b   +i+   +b);
System.out.println( nConversion of double to int );
i = (int)d;
System.out.println( d and i   +d +   +i);
System.out.println( nConversion of double to byte );
b = (byte)d;
System.out.printlnf d and b   +d+   +b);
      }
}


Вывод следующей программы:
Рисунок 3.14: Вывод

В следующем коде мы создаём объект типа vehicle (транспортное средство) с частью информации, содержавшейся в другом классе ( Convertible1)
convertible Convertible1 = new convertible ();
vehicle Vehiclel = (vehicle) Convertible1();
//  We now have an object of type vehicle with some of the information contained
//   in Convertible1.


Будьте осторожны с приведением типов - оно может не всегда делать то, о чём мы думаем: Просмотрите код ниже:
char symbol = 7 ;
System.out.println((int)symbol);
// This does not print 7, but in fact 55 (the ASCII value of the character '7')


Пример наследования
Пример 11:
class Employee
{
String name;
char sex;
Employee(String n, char s)
    {
name = n;
sex = s;
    }
public String getName()
    {
return name;
    }
public char getSex ()
    {
return sex;
    }
}

class Worker extends Employee
{
char category;
boolean dressAllowance;
Worker(String n,char s,char c,boolean d)
    {
super(n,s);
category = c;
dressAllowance = d;
    }
public char getCategory()
    {
return category;
    }
public boolean getAll()
    {
return dressAllowance;
    }
}

class Officer extends Employee
{
char empClass;
int experience;
boolean vehicle;
Officer(String n,char s,char c,int e,boolean v)
    {
super(n,s);
empClass = c;
experience = e;
vehicle = v;
    }
public char getEmpClass()
    {
return empClass;
    }
public int getExp()
    {
return experience;
    }
public boolean getVehicle()
    {
return vehicle;
    }
}

Public class InheDemo
{
public static void main(String args[])
    {
Worker w = new Worker( M.John , M , В ,true);
System.out.println( Worker Information );
System.out.println( Name :   +w.getName());
System.out.println( Sex :   +w.getSex());
System.out.println( Category :   +w.getCategory());
if(w.getAll())
System.out.println( Dress allowance is paid );
else
System.out.println( Dress allowance is not paid );
Officer о = new Officer( S. David , F , I ,15,true); System.out.println( nOfficer Information );
System.out.println( Name :   +o.getName());
System.out.println( Sex :   +o.getSex());
System.out.println( Class :   +o.getEmpClass());
System.out.println( Experience:   +o.getExp()+ years );
if(o.getVehicle ())
System.out.println( Vehicle is provided ) ;
else
System.out.println( Vehicle is not provided );
    }
}


Вывод программы:
Рисунок 3.15: Вывод InheDemo

В вышеупомянутой программе имеется три класса: Employee, Worker and Officer.

Служащий (Employee) может быть рабочим (Worker) или офицером (Officer), но они имеют свойства имя (name) и пол (sex). Предположим, что служащий может быть в категории рабочего или офицера. Если служащий попадает в категорию офицера, то свойства офицера наследуются подобно vehicle (см. выше) от родительского класса. Через наследование, мы можем избежать дублирования. Например, без наследования мы должны были обеспечить свойства имя (name) и пол (sex) в классе Рабочего так же как в классе Офицера.

В программе, класс Employee является суперклассом а классы Worker и Officer его подклассы. Следовательно, все методы Employee доступны Worker и Officer. В классе InheDemo мы создали объекты класса Worker и Officer. С помощью этих объектов мы обращаемся к методам класса Employee подобно
w.getName () ;
о .getName () ;


Здесь, мы не создаем объект класса Employee, но через его подклассы, мы можем вызвать конструктор класса Employee. Это делается с помощью ключевого слова «super». Инструкция в классе Worker или Officer
super(n,s);
вызывает конструктор суперкласса, которым является класс Служащего (Employee) и передаёт ему эти два параметра (n и s).

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

Rus. Open Source company, г. Саратов
ул. Орджоникидзе, 156, офис 203
тел: 8 (8452) 57-84-41
e-mail: info@rus_opensource.com

Главная | Обзоры | О разном
Карта сайта

Учебная литература:

Введение в Linux
Основы JAVA
Архивы

© 2013 opensourcerules.net