Мы всегда определяли классы для создания объектов. Объекты — это сущности с функциональностью, а классы — это классификации типов объектов. Это базовая концепция объектно-ориентированного подхода.
При наследовании мы рассматриваем классы как расширяемые предметы, что улучшает наше понимание «классов».
О самом классе можно еще многое обсудить. Мы продолжим углублять
статические элементы данных
Существуют некоторые данные, используемые для выражения состояния класса. Например, в классе Human мы можем использовать «популяцию» для обозначения общего количества объектов в классе Human. «Население» напрямую описывает состояние класса, а не объекта.
Население класса Человек составляет 8 человек.
Все объекты класса совместно используют данные «населения». Такие данные называются элементом данных класса (полем класса).
В определении класса мы используем ключевое слово static для объявления членов данных класса, например:
Скопируйте код кода следующим образом:
классЧеловеческий
{
/**
* конструктор
*/
общественный человек (int h)
{
this.height = ч;
}
/**
*аксессуар
*/
публичный int getHeight()
{
вернуть this.height;
}
/**
* мутатор
*/
public voidrowHeight(int h)
{
this.height = this.height + h;
}
/**
*дыхание
*/
публичное дыхание пустоты()
{
System.out.println("ху...ху...");
}
частная высота int;
частная статическая совокупность;
общедоступное статическое логическое значение is_mammal = true;
}
Мы определяем два элемента данных класса: популяцию и is_mammal. Все объекты Human имеют общие данные о популяции; атрибут is_mammal (является млекопитающим) любого объекта Human имеет значение true.
Членам данных класса также необходимо установить права доступа. Для членов данных класса, объявленных как общедоступные, к ним можно получить прямой доступ извне, используя class.field или object.field (если объект этого класса существует). Оба метода доступа разумны, поскольку члены данных класса можно рассматривать как атрибуты класса и как атрибуты, общие для всех членов. Если член данных класса определен как частный, то доступ к члену данных класса можно получить только внутри класса.
(Выше Is_mammal установлен как общедоступный только для демонстрации. Это довольно опасно. Если кто-то использует Human.is_mammal=false;, пострадают все люди. Опять же, основной принцип заключается в том, чтобы сделать данные как можно более конфиденциальными.)
статический метод
У нас также могут быть методы класса, которые являются методами, объявленными как статические. Методы класса представляют собой действия, которые может реализовать класс, и эти операции не затрагивают конкретный объект. Если метод объявлен статическим, он может вызывать только статические данные и методы, но не нестатические данные и методы.
Фактически, в статическом методе не будет неявно переданных параметров this и super. У нас нет возможности ссылаться на данные и методы, принадлежащие объекту (а это именно то, что нам нужно).
Исходя из сказанного выше, имеем следующую взаимосвязь:
Красная пунктирная линия обозначает недоступность. Другими словами, к данным объекта невозможно получить доступ в методах класса.
Затем мы добавляем статический метод getPopulation(), который возвращает статические данные о популяции:
Скопируйте код кода следующим образом:
классЧеловеческий
{
/**
* конструктор
*/
общественный человек (int h)
{
this.height = ч;
}
/**
*аксессуар
*/
публичный int getHeight()
{
вернуть this.height;
}
/**
* мутатор
*/
public voidrowHeight(int h)
{
this.height = this.height + h;
}
/**
*дыхание
*/
публичное дыхание пустоты()
{
System.out.println("ху...ху...");
}
частная высота int;
/*
* статический метод, доступ к совокупности
*/
публичный статический int getPopulation()
{
вернуть Human.population;
}
частная статическая совокупность;
частное статическое логическое значение is_mammal = true;
}
При вызове метода класса мы можем вызвать его через class.method() или object.method(). Например, используйте следующий тест класса Test:
Скопируйте код кода следующим образом:
тест публичного класса
{
public static void main(String[] args)
{
System.out.println(Human.getPopulation());
Человек aPerson = новый Человек(160);
System.out.println(aPerson.getPopulation());
}
}
Мы вызвали метод класса getPopulation() вне определения класса двумя способами.
Методы объекта изменяют данные класса
Мы видим, что методы объекта могут получать доступ к данным класса. Это очень полезная концепция. Состояние класса может меняться вместе с объектами. Например, «население» должно увеличиваться на 1 при создании объекта. Мы можем изменить данные «населения» класса в методах объекта. Мы получаем доступ к членам данных класса в конструкторе ниже. Метод построения здесь — нестатический метод, то есть метод объекта:
Скопируйте код кода следующим образом:
классЧеловеческий
{
/**
* конструктор
*/
общественный человек (int h)
{
this.height = ч;
Человеческое.популяция = Человеческое.популяция + 1;
}
/**
*аксессуар
*/
публичный int getHeight()
{
вернуть this.height;
}
/**
* мутатор
*/
public voidrowHeight(int h)
{
this.height = this.height + h;
}
/**
*дыхание
*/
публичное дыхание пустоты()
{
System.out.println("ху...ху...");
}
частная высота int;
/*
* статический метод, доступ к совокупности
*/
публичный статический int getPopulation()
{
вернуть Human.population;
}
частная статическая совокупность;
частное статическое логическое значение is_mammal = true;
}
Каждый раз, когда мы создаем объект, мы изменяем данные класса с помощью метода построения объекта и увеличиваем данные класса населения на 1. Таким образом, популяция может отражать общее количество объектов, принадлежащих этому классу, в реальном времени (вы можете создать несколько объектов в Test, а затем распечатать Human.population).
В дополнение к приведенному выше примеру конструктора мы также можем получить доступ к данным класса в обычных методах объекта.
финальный
Основное значение ключевого слова Final: Эти данные/метод/класс не могут быть изменены.
1. Конечные данные базового типа: постоянное значение, которое может быть присвоено только один раз и не может быть изменено повторно.
2. Последний метод: этот метод нельзя переопределить. Частные методы по умолчанию являются конечными методами.
3. Финальный класс: этот класс не может быть унаследован.
Объекты обычных типов также могут иметь ключевое слово Final, что означает, что ссылку на объект (ссылку) больше нельзя изменить. То есть ссылка может указывать только на один объект. Однако содержимое объекта может измениться (аналогично статическим указателям в C). Мы рассмотрим ссылки на объекты позже.
Если базовый тип данных является одновременно окончательным и статичным, то он хранит только одну копию фиксированного значения. Это отлично подходит для хранения констант, таких как число «пи».
Подвести итог
статическое поле, статический метод
класс.static_method()
финальный