Введение
Инкапсуляция - это как мешок, который объединяет операции и данные, связанные с объектом. Полиморфизм - это способность объекта принимать множество форм. В этом лабораторном задании вы увидите, как это выглядит.
💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал
Инкапсуляция - это как мешок, который объединяет операции и данные, связанные с объектом. Полиморфизм - это способность объекта принимать множество форм. В этом лабораторном задании вы увидите, как это выглядит.
Полиморфизм - это одна из особенностей объектно-ориентированного программирования, которая позволяет нам выполнять одно и то же действие разными способами. Полиморфизм, который разрешается на этапе компиляции, - это статический полиморфизм или полиморфизм времени компиляции (перегрузка относится к этому типу). Полиморфизм, который разрешается во время выполнения, называется полиморфизмом времени выполнения (переопределение относится к этому типу). Полиморфизм также обеспечивает возможность объекта принимать множество форм. Очень распространенным использованием полиморфизма в объектно-ориентированном программировании является ситуация, когда ссылка на родительский класс используется для ссылки на объект дочернего класса. Любой Java-объект, который может пройти более одного теста IS-A, считается полиморфным. Переменная-справочник может ссылаться на любой объект своего объявленного типа или на любой подтип своего объявленного типа. Переменная-справочник может быть объявлена как тип класса, так и как тип интерфейса. Случай наследования - это одна форма полиморфизма, потому что существуют разные виды поведения животных и особенности животных. Но здесь мы представляем другую форму полиморфизма:
Пример:
Напишите следующий код в файле /home/labex/project/polymorphismTest.java
:
// мы объявляем интерфейс life, у него есть некоторые методы, мы просто их опускаем.
interface life{}
// и объявляем класс для реализации полиморфизма, внутренний контент, мы просто игнорируем его для этого случая.
class Animal{}
// мы объявляем класс Human для использования класса Animal и интерфейса life.
class Human extends Animal implements life{}
public class polymorphismTest{
public static void main(String[] args){
Human human = new Human(); // создаем экземпляр объекта Human
// Human имеет прямую или косвенную связь наследования с классами Animal, Object
// Human реализует интерфейс life, поэтому выражение instanceof возвращает true
System.out.println("human является экземпляром Human? " + (human instanceof Human));
System.out.println("human является экземпляром Animal? " + (human instanceof Animal));
System.out.println("human является экземпляром life? " + (human instanceof life));
System.out.println("human является экземпляром Object? " + (human instanceof Object));
}
}
Вывод:
Запустите файл polymorphismTest.java
с использованием следующих команд:
javac /home/labex/project/polymorphismTest.java
java polymorphismTest
Посмотрите на вывод:
human является экземпляром Human? true
human является экземпляром Animal? true
human является экземпляром life? true
human является экземпляром Object? true
Инкапсуляция - это концепция, которая позволяет нам скрыть детали программы. Другие вызывающие объекты просто должны знать, что программа может предоставить, не зная, как она работает. Инкапсуляция упрощает разработку. Это механизм упаковки данных (переменных) и алгоритмов (методного кода). При инкапсуляции переменные класса скрываются от других классов и могут быть доступны только через методы класса. Поэтому инкапсуляция также называется скрытием данных. Обычно поля класса объявляются приватными, и мы используем методы-геттеры/сеттеры для доступа к и контроля над данными. Мы определяем публичные методы только для предоставления функциональности другим классам или для внешнего использования. Иногда мы определяем приватные методы, которые используются только внутри класса для некоторых конкретных целей. Именно так мы скрываем детали.
Пример:
Напишите следующий код в файле /home/labex/project/encapsulationTest.java
:
class Person{
/*
* В классе Person есть две переменные-члены.
* Они приватные, поэтому не могут быть доступны напрямую за пределами этого класса.
*/
private String name;
private int age;
// пустой конструктор
public Person(){
}
// конструктор с двумя параметрами
public Person(String name,int age){
this.name = name;
this.age = age;
}
// используйте этот метод для получения значения name
public String getName(){
return this.name;
}
// используйте этот метод для установки значения name
public void setName(String name){
this.name = name;
}
// используйте этот метод для получения значения age
public int getAge(){
return this.age;
}
// используйте этот метод для установки значения age
public void setAge(int age){
this.age = age;
}
}
public class encapsulationTest{
public static void main(String[] args){
Person p = new Person();
// мы устанавливаем имя и возраст человека с использованием методов setXXX()
p.setName("Mike");
p.setAge(20);
// мы получаем имя и возраст человека с использованием методов getXXX()
System.out.println("Name: " + p.getName() + ", Age: " + p.getAge());
}
}
Вывод:
Запустите файл encapsulationTest.java
с использованием следующих команд:
javac /home/labex/project/encapsulationTest.java
java encapsulationTest
Посмотрите на вывод:
Name: Mike, Age: 20
При инкапсуляции нам не нужно напрямую обращаться к данным или свойствам объекта с использованием object.XXX
, а мы используем некоторые стандартные методы в виде getXXX()
, setXXX()
и других методов для выполнения этой задачи. В общем виде программировании преимущество полиморфизма будет проявляться, но пока вы просто запомните, что полиморфизм позволяет объекту принимать множество форм.