Мы попытались определить классы. Определение класса — это создание нового типа. Имея класс, мы затем создаем объекты соответствующего типа. Кроме того, каждый тип должен также иметь понятный интерфейс, которым смогут пользоваться пользователи.
Мы можем использовать другие объекты в определении нового класса. Это композиция. Комбинация — один из основных способов достижения возможности повторного использования программ на Java.
Сочетание с «есть-а»
Один объект является элементом данных другого объекта. Например, давайте посмотрим на пример перезаряжаемого фонарика, упомянутый ранее:
Батарея, светодиод, кнопка... в перезаряжаемом фонарике — все это может быть объектом. Мы можем определить класс Battery для определения и создания объектов батареи. В определении класса перезаряжаемого фонарика объект батареи может использоваться в качестве элемента данных для представления состояния части батареи.
Ниже мы определяем класс батареи и используем мощность для представления ее мощности. Аккумулятор можно заряжать (chargeBattery) и использовать (useBattery). Мы используем объекты типа Battery в качестве членов данных в последующем определении класса Torch:
Скопируйте код кода следующим образом:
классБатарея
{
общественный недействительный заряд батареи (двойной р)
{
если (this.power < 1.) {
эта.мощность = эта.мощность + р;
}
}
публичное логическое использованиеBattery(двойной p)
{
если (this.power >= p) {
эта.мощность = эта.мощность - р;
вернуть истину;
}
еще {
this.power = 0,0;
вернуть ложь;
}
}
частная двойная мощность = 0,0;
}
классФакел
{
/**
* 10% мощности за час использования
* предупреждение при отключении питания
*/
public void TurnOn(int часы)
{
логическое значение;
используемый = this.theBattery.useBattery(часы*0,1);
if (можно использовать != true) {
System.out.println("Больше нельзя использовать, необходимо зарядить!");
}
}
/**
* 20% заряда за час
*/
общественный сбор за недействительность (число часов)
{
this.theBattery.chargeBattery(часы*0,2);
}
/**
* состав
*/
частная батарея theBattery = новая батарея();
}
Новое выше выделяет память для объектаBattery и является обязательным.
Мы определяем класс батареи. Класс Torch использует объект типа Battery (theBattery) в качестве члена данных. В методе Torch мы реализуем функциональность (функциональность), предоставляемую классом Battery, путем манипулирования интерфейсом объектаBattery.
Мы говорим, что объект Torch имеет (имеет) объект Battery. Вышеупомянутая связь может быть выражена как:
has-a: В фонаре есть аккумулятор (обратите внимание на ромбовидное соединение выше)
Благодаря комбинированию мы можем повторно использовать код, связанный с батареей. Если у нас есть другие классы, использующие Battery, например мобильные телефоны и калькуляторы, мы можем объединить в них объекты Battery. Это избавляет от необходимости писать отдельные связанные функции для каждого класса.
Мы можем добавить класс Test, чтобы увидеть фактический эффект:
Скопируйте код кода следующим образом:
тест публичного класса
{
public static void main(String[] args)
{
Факел aTorch = новый Факел();
System.out.println("Заряд: 2 часа");
aФакел.заряд(2);
System.out.println("Первое включение: 3 часа");
aTorch.turnOn(3);
System.out.println("Второе включение: 3 часа");
aTorch.turnOn(3);
}
}
Результат запуска вышеуказанной программы:
Заряд: 2 часа
Первое включение: 3 часа
Второе включение: 3 часа
Больше не пригоден для использования, необходимо заряжать!
Мы используем функции, предоставляемые объектом батареи, посредством комбинации, например, определение того, разряжена ли батарея (на основе возвращаемого значения useBattery()).
базовый тип
От HelloWorld до объектно-ориентированного мы называем int, float, double, boolean и т. д. базовыми типами (примитивными типами), которые являются специальными классами. Мы можем понимать целое число как объект типа int. Тип int может иметь интерфейсы операций, такие как присваивание, сложение и вычитание. Обычные типы можно рассматривать как расширения базовых типов. Мы видели примитивные типы как члены данных, параметры метода, возвращаемые значения метода и автоматические переменные внутри методов. В этих местах также можно использовать естественные объекты общего типа, такие как объекты классов «Батарея» и «Факел».
В языке C доступные типы данных (в основном) предустановлены, например int и float. В Java, помимо использования этих предустановленных типов данных, мы также можем настраивать нужные типы данных с помощью классов, а затем использовать их с помощью комбинаций. Но есть различия между базовыми типами и обычными типами. Базовые типы используются часто и занимают небольшой объем памяти. Поэтому в Java в целях эффективности эти базовые типы имеют методы управления памятью, отличные от обычных типов (то есть пользовательских классов). Например, базовым типам будет выделено пространство памяти после объявления, тогда как обычным типам необходимо использовать ключевое слово new для выделения пространства памяти.
Java предоставляет соответствующие общие типы для каждого базового типа. Например, базовый тип int соответствует типу Integer. Если объект базового типа преобразуется в соответствующую переменную общего типа, то так называемый базовый тип становится типом в общем смысле (разницы в управлении памятью уже нет).
Таким образом, мы глубже понимаем концепцию Java «все является объектом».
Подвести итог
комбинация, имеет-а
базовый тип