Java — объект и классы
Java — это объектно-ориентированный язык. Как язык с объектно-ориентированной функцией, Java поддерживает следующие основные концепции —
- Полиморфизм
- Наследование
- Инкапсуляция
- Абстракция
- Классы
- Объекты
- Экземпляр
- Метод
- Передача сообщений
В этой главе мы рассмотрим концепции — классы и объекты.
-
Объект − Объекты имеют состояния и поведение. Пример:у собаки есть состояния — цвет, имя, порода, а также поведение — виляние хвостом, лай, еда. Объект — это экземпляр класса.
-
Класс − Класс может быть определен как шаблон/схема, описывающая поведение/состояние, поддерживаемое объектом этого типа.
Объекты в Java
Давайте теперь углубимся в то, что представляют собой объекты. Если мы рассмотрим реальный мир, то сможем найти множество объектов вокруг себя, автомобили, собак, людей и т. д. Все эти объекты имеют состояние и поведение.
Если рассматривать собаку, то ее состояние - имя, порода, окрас, а поведение - лай, виляние хвостом, бег.
Если вы сравните программный объект с реальным объектом, у них будут очень похожие характеристики.
Программные объекты также имеют состояние и поведение. Состояние программного объекта хранится в полях, а поведение отображается с помощью методов.
Таким образом, в разработке программного обеспечения методы работают с внутренним состоянием объекта, а взаимодействие между объектами осуществляется с помощью методов.
Классы в Java
Класс — это план, на основе которого создаются отдельные объекты.
Ниже приведен пример класса.
Пример
public class Dog { String breed; int age; String color; void barking() { } void hungry() { } void sleeping() { } }
Класс может содержать любой из следующих типов переменных.
-
Локальные переменные − Переменные, определенные внутри методов, конструкторов или блоков, называются локальными переменными. Переменная будет объявлена и инициализирована в методе, и переменная будет уничтожена, когда метод завершится.
-
Переменные экземпляра − Переменные экземпляра — это переменные внутри класса, но вне любого метода. Эти переменные инициализируются при создании экземпляра класса. Доступ к переменным экземпляра можно получить из любого метода, конструктора или блоков этого конкретного класса.
-
Переменные класса − Переменные класса — это переменные, объявленные внутри класса, вне любого метода, с ключевым словом static.
Класс может иметь любое количество методов для доступа к значениям различных видов методов. В приведенном выше примере barking(), голодный() и sleep() являются методами.
Ниже приведены некоторые важные темы, которые необходимо обсудить при изучении классов языка Java.
Конструкторы
При обсуждении классов одной из наиболее важных подтем будут конструкторы. У каждого класса есть конструктор. Если мы явно не напишем конструктор для класса, компилятор Java создаст конструктор по умолчанию для этого класса.
Каждый раз, когда создается новый объект, будет вызываться как минимум один конструктор. Главное правило конструкторов состоит в том, что они должны иметь то же имя, что и класс. Класс может иметь более одного конструктора.
Ниже приведен пример конструктора —
Пример
public class Puppy { public Puppy() { } public Puppy(String name) { // This constructor has one parameter, name. } }
Java также поддерживает одноэлементные классы, в которых вы можете создать только один экземпляр класса.
Примечание − У нас есть два разных типа конструкторов. Мы собираемся подробно обсудить конструкторы в следующих главах.
Создание объекта
Как упоминалось ранее, класс предоставляет чертежи для объектов. Таким образом, объект создается из класса. В Java ключевое слово new используется для создания новых объектов.
При создании объекта из класса есть три шага —
-
Декларация − Объявление переменной с именем переменной с типом объекта.
-
Экземпляр − Ключевое слово «новое» используется для создания объекта.
-
Инициализация − За ключевым словом new следует вызов конструктора. Этот вызов инициализирует новый объект.
Ниже приведен пример создания объекта —
Пример
Живая демонстрацияpublic class Puppy { public Puppy(String name) { // This constructor has one parameter, name. System.out.println("Passed Name is :" + name ); } public static void main(String []args) { // Following statement would create an object myPuppy Puppy myPuppy = new Puppy( "tommy" ); } }
Если мы скомпилируем и запустим вышеуказанную программу, то она даст следующий результат —
Вывод
Passed Name is :tommy
Доступ к переменным и методам экземпляра
Доступ к переменным и методам экземпляра осуществляется через созданные объекты. Чтобы получить доступ к переменной экземпляра, используйте полный путь —
/* First create an object */ ObjectReference = new Constructor(); /* Now call a variable as follows */ ObjectReference.variableName; /* Now you can call a class method as follows */ ObjectReference.MethodName();
Пример
В этом примере объясняется, как получить доступ к переменным экземпляра и методам класса.
Живая демонстрацияpublic class Puppy { int puppyAge; public Puppy(String name) { // This constructor has one parameter, name. System.out.println("Name chosen is :" + name ); } public void setAge( int age ) { puppyAge = age; } public int getAge( ) { System.out.println("Puppy's age is :" + puppyAge ); return puppyAge; } public static void main(String []args) { /* Object creation */ Puppy myPuppy = new Puppy( "tommy" ); /* Call class method to set puppy's age */ myPuppy.setAge( 2 ); /* Call another class method to get puppy's age */ myPuppy.getAge( ); /* You can access instance variable as follows as well */ System.out.println("Variable Value :" + myPuppy.puppyAge ); } }
Если мы скомпилируем и запустим вышеуказанную программу, то она даст следующий результат —
Вывод
Name chosen is :tommy Puppy's age is :2 Variable Value :2
Правила объявления исходного файла
В качестве последней части этого раздела давайте теперь рассмотрим правила объявления исходного файла. Эти правила необходимы при объявлении классов, import заявления и пакет операторы в исходном файле.
-
В исходном файле может быть только один общедоступный класс.
-
Исходный файл может иметь несколько закрытых классов.
-
Имя общедоступного класса также должно совпадать с именем исходного файла, к которому следует добавить .java. в конце. Например:имя класса — общедоступный класс Employee{}. тогда исходный файл должен иметь имя Employee.java.
-
Если класс определен внутри пакета, то оператор package должен быть первым оператором в исходном файле.
-
Если присутствуют операторы импорта, они должны быть записаны между оператором пакета и объявлением класса. Если операторов пакета нет, то оператор импорта должен быть первой строкой в исходном файле.
-
Операторы import и package относятся ко всем классам, присутствующим в исходном файле. Невозможно объявить разные операторы импорта и/или пакета для разных классов в исходном файле.
Классы имеют несколько уровней доступа и существуют разные типы классов; абстрактные классы, окончательные классы и т. д. Мы объясним все это в главе о модификаторах доступа.
Помимо вышеупомянутых типов классов, в Java также есть несколько специальных классов, называемых внутренними классами и анонимными классами.
Пакет Java
Проще говоря, это способ категоризации классов и интерфейсов. При разработке приложений на Java будут написаны сотни классов и интерфейсов, поэтому классификация этих классов является обязательной и значительно упрощает жизнь.
Отчеты об импорте
В Java, если указано полное имя, которое включает в себя пакет и имя класса, компилятор может легко найти исходный код или классы. Оператор импорта — это способ указать правильное место для компилятора, чтобы найти этот конкретный класс.
Например, следующая строка попросит компилятор загрузить все классы, доступные в каталоге java_installation/java/io —
import java.io.*;
Простой пример
Для нашего примера мы создадим два класса. Это Сотрудник и СотрудникТест.
Сначала откройте блокнот и добавьте следующий код. Помните, что это класс Employee, и этот класс является общедоступным. Теперь сохраните исходный файл под именем Employee.java.
Класс Employee имеет четыре переменных экземпляра:имя, возраст, должность и зарплата. Класс имеет один явно определенный конструктор, который принимает параметр.
Пример
import java.io.*; public class Employee { String name; int age; String designation; double salary; // This is the constructor of the class Employee public Employee(String name) { this.name = name; } // Assign the age of the Employee to the variable age. public void empAge(int empAge) { age = empAge; } /* Assign the designation to the variable designation.*/ public void empDesignation(String empDesig) { designation = empDesig; } /* Assign the salary to the variable salary.*/ public void empSalary(double empSalary) { salary = empSalary; } /* Print the Employee details */ public void printEmployee() { System.out.println("Name:"+ name ); System.out.println("Age:" + age ); System.out.println("Designation:" + designation ); System.out.println("Salary:" + salary); } }
Как упоминалось ранее в этом руководстве, обработка начинается с основного метода. Следовательно, для того, чтобы мы могли запустить этот класс Employee, должен быть метод main и должны быть созданы объекты. Для этих задач мы создадим отдельный класс.
Ниже приведен EmployeeTest. class, который создает два экземпляра класса Employee и вызывает методы для каждого объекта для присвоения значений каждой переменной.
Сохраните следующий код в файле EmployeeTest.java.
import java.io.*; public class EmployeeTest { public static void main(String args[]) { /* Create two objects using constructor */ Employee empOne = new Employee("James Smith"); Employee empTwo = new Employee("Mary Anne"); // Invoking methods for each object created empOne.empAge(26); empOne.empDesignation("Senior Software Engineer"); empOne.empSalary(1000); empOne.printEmployee(); empTwo.empAge(21); empTwo.empDesignation("Software Engineer"); empTwo.empSalary(500); empTwo.printEmployee(); } }
Теперь скомпилируйте оба класса и запустите EmployeeTest. чтобы увидеть результат следующим образом –
Вывод
C:\> javac Employee.java C:\> javac EmployeeTest.java C:\> java EmployeeTest Name:James Smith Age:26 Designation:Senior Software Engineer Salary:1000.0 Name:Mary Anne Age:21 Designation:Software Engineer Salary:500.0
Что дальше?
На следующем занятии мы обсудим основные типы данных в Java и то, как их можно использовать при разработке приложений Java.
java