Класс состоит из данных и методов, работающих с данными.
Объект является конкретным экземпляром класса.
Доступ к членам объекта (переменным и методам) осуществляется с помощью оператора <<точка>>, размещаемого между именем объекта и именем переменной.
Копия переменных экземпляра (не статических) содержится в каждом объекте (экземпляре) класса.
Статические переменные класса связаны с классом. Всегда существует ровно одна копия переменной класса независимо от числа экземпляров класса.
Статическим методам класса не передается аргумент this, и, следовательно, они не владеют текущим экземпляром класса, который можно использовать для неявной ссылки на переменные экземпляра или для неявного вызова методов экземпляра.
Объекты создаются при помощи ключевого слова new, которое вызывает конструктор класса с соответствующим списком аргументов..
Если конструктор в классе не определен, то автоматически создается конструктор по умолчанию.
Класс может наследовать переменные и методы другого класса, не объявленные как private, становясь его подклассом, т.е. путем объявления другого класса в блоке extends.
Класс java.lang.Object -- суперкласс любого класса по умолчанию. Это корневой класс иерархии классов в языке Java, не имеющий суперкласса. Все классы наследуют методы класса Object.
Можно явно ссылаться на скрытые переменные с помощью ключевого слова super.
Данные и методы могут быть скрыты и инкапсулированы внутри класса благодаря модификаторам видимостиprivate и protected. Переменные класса, объявленные как public, видимы везде. Переменные класса без модификаторов видимости видны только внутри пакета.
Абстрактный класс содержит абстрактные методы. Методы должны быть реализованы в подклассе прежде, чем будут созданы экземпляры этого подкласса.
Интерфейс в языке Java -- это набор абстрактных методов и констант (переменных, объявленных как finalstatic). Объявление интерфейса создает новый тип данных.
Класс реализует интерфейс, объявляя его в блоке implements и создавая тело метода для каждого из абстрактных методов интерфейса.
35.
Модификаторы доступа – это зарезервированные слова, которые определяют область видимости/доступа полей или же методов класса. Заметьте, что классу не свойственно определение модификаторов доступа, понятно почему.
Итак, перечислим модификаторы доступа:
· private – метод или поле класса, помеченные этим модификатором, доступны только в пределах данного класса;
· package – поле/метод доступно в пределах всего пакета; это значение по умолчанию для всех полей или методов объявленных без модификаторов доступа;
· protected – здесь доступ разграничивается для всех “родных” (т.е. производных или родительских) классов данного класса;
· public – доступ открыт отовсюду и для всех;
После этого можно перейти к списку модификаторов у полей.
И первое из них – это static. Статические поля – это поля, которые едины для всех объектов данного класса. Т.е. ссылка этого поля у любого экземпляра класса будет ссылаться на одно и то же значение. Например:
class box
{
public static int iNum;
}
public MyBox
{
public static void main(String argv[])
{
box a = new box();
box b = new box();
a.iNum = 123;
System.out.println(“box b.iNum = ”+b.iNum);
}
}
Результатом выполнения данной программы будет:
box b.iNum = 123
final – это модификатор, позволяющий объявлять константные поля в классе. Если у вас есть некоторое свойство, проектируемого вами объекта, значение которого не будет меняться, то вы может воспользоваться этим модификатором. Любая попытка переопределить значение поля с модификатором final приводит к выбросу исключения.
public final String boxCompanyName = “BlackBox”;
Далее я просто перечислю два специфических и очень важных модификатора:
transient – решает проблему сериализации (представления объекта в виде последовательности байтов данных);
volatile – необходим в процессе синхронизации потоков вычислений и управления памятью;
И последнее что нам осталось рассмотреть – это использование модификаторов при объявлении методов.
class box
{
private static int iNum;
public static void ChangeiNum(int x)
{
iNum = x;
}
}
public class MyBox
{
public static void main(String argv[])
{
box a = new box();
a.ChangeiNum(5); // здесь мы изменили private значение поля iNum объекта a, класса box