Java - объект и классы
Java - объектно-ориентированный язык. Как язык с объектно-ориентированной функцией Java поддерживает следующие фундаментальные концепции:
- Polymorphism
- Inheritance
- Encapsulation
- Abstraction
- Classes
- Objects
- Instance
- Method
- Сообщение передается
В этой главе мы рассмотрим концепции - классы и объекты.
Object- У объектов есть состояния и поведение. Пример: у собаки есть состояния - цвет, имя, порода, а также поведение - виляние хвостом, лай, еда. Объект - это экземпляр класса.
Class - Класс может быть определен как шаблон / план, который описывает поведение / состояние, которое поддерживает объект его типа.
Объекты в Java
Давайте теперь углубимся в то, что такое объекты. Если мы рассмотрим реальный мир, мы можем найти множество объектов вокруг нас: автомобили, собак, людей и т. Д. Все эти объекты имеют состояние и поведение.
Если рассматривать собаку, то ее состояние - кличка, порода, окрас, а поведение - лай, виляние хвостом, бег.
Если вы сравните программный объект с реальным объектом, они будут иметь очень похожие характеристики.
Программные объекты также имеют состояние и поведение. Состояние программного объекта хранится в полях, а поведение отображается с помощью методов.
Таким образом, при разработке программного обеспечения методы работают с внутренним состоянием объекта, а связь между объектами осуществляется с помощью методов.
Классы на Java
Класс - это план, из которого создаются отдельные объекты.
Ниже приведен образец класса.
пример
public class Dog {
String breed;
int age;
String color;
void barking() {
}
void hungry() {
}
void sleeping() {
}
}
Класс может содержать любой из следующих типов переменных.
Local variables- Переменные, определенные внутри методов, конструкторов или блоков, называются локальными переменными. Переменная будет объявлена и инициализирована внутри метода, и переменная будет уничтожена, когда метод будет завершен.
Instance variables- Переменные экземпляра - это переменные внутри класса, но вне любого метода. Эти переменные инициализируются при создании экземпляра класса. Доступ к переменным экземпляра можно получить из любого метода, конструктора или блоков этого конкретного класса.
Class variables - Переменные класса - это переменные, объявленные внутри класса вне любого метода с помощью ключевого слова static.
У класса может быть любое количество методов для доступа к значениям различных видов методов. В приведенном выше примере методы barking (), hungry () и sleep ().
Ниже приведены некоторые важные темы, которые необходимо обсудить при изучении классов языка Java.
Конструкторы
При обсуждении классов одной из наиболее важных подтем будут конструкторы. У каждого класса есть конструктор. Если мы явно не пишем конструктор для класса, компилятор Java создает конструктор по умолчанию для этого класса.
Каждый раз, когда создается новый объект, будет вызываться как минимум один конструктор. Главное правило конструкторов - они должны иметь то же имя, что и класс. У класса может быть более одного конструктора.
Ниже приведен пример конструктора -
пример
public class Puppy {
public Puppy() {
}
public Puppy(String name) {
// This constructor has one parameter, name.
}
}
Java также поддерживает классы Singleton, в которых вы можете создать только один экземпляр класса.
Note- У нас есть два разных типа конструкторов. Подробнее о конструкторах мы поговорим в следующих главах.
Создание объекта
Как упоминалось ранее, класс предоставляет чертежи для объектов. Итак, в основном объект создается из класса. В Java ключевое слово new используется для создания новых объектов.
При создании объекта из класса есть три шага:
Declaration - Объявление переменной с именем переменной с типом объекта.
Instantiation - Ключевое слово new используется для создания объекта.
Initialization- За ключевым словом 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
Правила объявления исходного файла
В последней части этого раздела давайте рассмотрим правила объявления исходного файла. Эти правила необходимы при объявлении классов, операторов импорта и операторов пакета в исходном файле.
В исходном файле может быть только один открытый класс.
Исходный файл может иметь несколько закрытых классов.
Имя общедоступного класса также должно быть именем исходного файла, к которому следует добавить .javaв конце. Например: имя класса - открытый класс Employee {}, тогда исходный файл должен иметь вид Employee.java.
Если класс определен внутри пакета, то оператор пакета должен быть первым оператором в исходном файле.
Если операторы импорта присутствуют, они должны быть записаны между оператором пакета и объявлением класса. Если нет операторов пакета, то оператор импорта должен быть первой строкой в исходном файле.
Операторы импорта и пакета будут относиться ко всем классам, присутствующим в исходном файле. Невозможно объявить разные операторы импорта и / или пакета для разных классов в исходном файле.
У классов есть несколько уровней доступа, и есть разные типы классов; абстрактные классы, финальные классы и т. д. Обо всем этом мы расскажем в главе о модификаторах доступа.
Помимо вышеупомянутых типов классов, в Java также есть некоторые специальные классы, называемые внутренними классами и анонимными классами.
Пакет Java
Проще говоря, это способ категоризации классов и интерфейсов. При разработке приложений на Java будут написаны сотни классов и интерфейсов, поэтому категоризация этих классов является обязательной и значительно упрощает жизнь.
Заявления об импорте
В Java, если дано полное имя, включающее пакет и имя класса, компилятор может легко найти исходный код или классы. Оператор импорта - это способ указать компилятору правильное местоположение для поиска этого конкретного класса.
Например, следующая строка попросит компилятор загрузить все классы, доступные в каталоге java_installation / java / io -
import java.io.*;
Простой пример использования
В нашем примере мы создадим два класса. Это Employee и EmployeeTest.
Сначала откройте блокнот и добавьте следующий код. Помните, что это класс 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, должен быть главный метод и должны быть созданы объекты. Для этих задач мы создадим отдельный класс.
Ниже приведен класс EmployeeTest , который создает два экземпляра класса 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.