Вступление
В объектно-ориентированном программировании существует принцип, называемый полиморфизмом. Полиморфизм означает, что поведение многих классов реализуется по-разному. Например, объекты human и cat имеют поведение walk, но реализация walk отличается. Человек ходит на двух ногах независимо от того, ходит ли кошка на четырех ногах.
Создание абстрактного класса
Абстрактный класс – это класс, который имеет абстрактный метод и полный метод. Абстрактный метод – это метод, который не имеет никакой реализации. Это основной синтаксис создания абстрактного класса.
modifier abstract class class_name {
// code..
}
Это основной синтаксис создания абстрактного метода.
modifier abstract return_type method_name(parameters);
В этом примере есть два класса, которые называются Car как абстрактный класс и Гоночный автомобиль как класс, который распространяется на Car класс.
Автомобиль Класс.
public abstract class Car {
private String manufacturer;
private String model;
public Car(String manufacturer, String model) {
this.manufacturer = manufacturer;
this.model = model;
}
// create an abstract method
public abstract void run();
public String getManufacturer() {
return manufacturer;
}
public void setManufacturer(String manufacturer) {
this.manufacturer = manufacturer;
}
public String getModel() {
return model;
}
public void setModel(String model) {
this.model = model;
}
}
Гоночный автомобиль Класс.
public class RaceCar extends Car {
private String teamName;
public RaceCar(String manufacturer, String model, String teamName) {
super(manufacturer, model);
this.teamName = teamName;
}
// implement run() from Car class
@Override
public void run() {
System.out.println("Running with racing spec");
}
public String getTeamName() {
return teamName;
}
public void setTeamName(String teamName) {
this.teamName = teamName;
}
}
Основываясь на приведенном выше коде, класс Car содержит абстрактный метод с именем run() , который реализован специально внутри класса RaceCar .
Это пример использования класса Гоночный автомобиль в основном классе.
Основной класс.
public class MyApp {
public static void main(String[] args) {
RaceCar raceCar = new RaceCar("Porsche","911 GT3","Manthey Racing");
raceCar.run();
}
}
Выход
Running with racing spec
Основываясь на приведенном выше коде, метод run() вызывается из объекта raceCar , созданного из класса RaceCar .
Объект может быть создан из абстрактного класса. Это пример создания объекта из абстрактного класса с именем Car class.
public class MyApp {
public static void main(String[] args) {
Car myCar = new Car("Ford","Puma") {
// implement abstract method
@Override
public void run() {
System.out.println("running with factory spec");
}
};
// call the method
myCar.run();
}
}
Выход
running with factory spec
Основываясь на приведенном выше коде, абстрактный метод реализуется напрямую.
Если абстрактный класс имеет много абстрактных методов, класс, который распространяется на абстрактный класс, должен реализовывать все абстрактные методы.
Создание интерфейса
Интерфейс – это класс, который допускает только абстрактные методы. Интерфейс полезен для определения контракта, который впоследствии может быть использован многими классами. Это основной синтаксис создания интерфейса.
modifier interface interface_name {
// define some abstract methods..
}
Для создания метода в интерфейсе ключевое слово abstract не требуется.
В этом примере интерфейс вызывается Создается управляемый . Абстрактный метод с именем run() создается внутри этого интерфейса.
public interface Driveable {
// create an abstract method
public void run();
}
Этот интерфейс реализован классом Car . Если интерфейс реализован классом, все методы внутри интерфейса должны быть реализованы.
public class Car implements Driveable {
private String manufacturer;
private String model;
private double performanceRating;
public Car(String manufacturer, String model, double performanceRating) {
this.manufacturer = manufacturer;
this.model = model;
this.performanceRating = performanceRating;
}
// implement run() method from Driveable interface
@Override
public void run() {
System.out.println("Running with factory spec");
}
public String getManufacturer() {
return manufacturer;
}
public void setManufacturer(String manufacturer) {
this.manufacturer = manufacturer;
}
public String getModel() {
return model;
}
public void setModel(String model) {
this.model = model;
}
public double getPerformanceRating() {
return performanceRating;
}
public void setPerformanceRating(double performanceRating) {
this.performanceRating = performanceRating;
}
}
Основываясь на приведенном выше коде, аннотация @Override используется для реализации метода, указанного в интерфейсе.
В Java один класс может реализовывать множество интерфейсов. В этом примере интерфейс С возможностью обновления реализован классом Care .
Обновляемый интерфейс.
public interface Upgradeable {
public void upgrade(double number);
}
Класс автомобиля.
public class Car implements Driveable,Upgradeable {
private String manufacturer;
private String model;
private double performanceRating;
public Car(String manufacturer, String model, double performanceRating) {
this.manufacturer = manufacturer;
this.model = model;
this.performanceRating = performanceRating;
}
// implement run() method from Driveable interface
@Override
public void run() {
System.out.println("Running with factory spec");
}
// implement upgrade() method from Upgradeable interface
@Override
public void upgrade(double number) {
double upgradedPR = getPerformanceRating() + number;
setPerformanceRating(upgradedPR);
System.out.println("Car upgraded");
System.out.println("The performance rating now is: " + getPerformanceRating());
}
public String getManufacturer() {
return manufacturer;
}
public void setManufacturer(String manufacturer) {
this.manufacturer = manufacturer;
}
public String getModel() {
return model;
}
public void setModel(String model) {
this.model = model;
}
public double getPerformanceRating() {
return performanceRating;
}
public void setPerformanceRating(double performanceRating) {
this.performanceRating = performanceRating;
}
}
Основной класс
public class MyApp {
public static void main(String[] args) {
Car car = new Car("Renault","Clio", 12.5);
// call the methods
car.run();
car.upgrade(10.5);
}
}
Выход
Running with factory spec Car upgraded The performance rating now is: 23.0
На основе приведенного выше кода вызываются методы run() и upgrade() .
Метод по умолчанию доступен в интерфейсе. Метод по умолчанию в основном используется для определения реализации метода по умолчанию, если метод не реализован классом. Это основной синтаксис метода по умолчанию в интерфейсе.
modifier default return_type method_name(params) {
// code..
}
В этом примере метод по умолчанию вызывается work() в Работоспособном интерфейс создан. Затем этот интерфейс реализуется классом Employee .
Работоспособный интерфейс.
public interface Workable {
// define default method called work()
default void work() {
System.out.println("working...");
}
}
Сотрудник класс.
public class Employee implements Workable{
private String name;
public Employee(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Основной класс.
public class MyApp {
public static void main(String[] args) {
Employee employee = new Employee("John Doe");
employee.work();
}
}
Выход.
working...
Основываясь на приведенном выше коде, метод work() явно не реализован классом Employee таким образом, метод по умолчанию внутри Работоспособен используется интерфейс.
Источники
Узнайте больше об абстрактном классе по этой ссылке /. Узнайте больше об интерфейсе по этой
ссылке .
Я надеюсь, что эта статья будет полезна для изучения языка программирования Java. Если у вас есть какие-либо мысли или комментарии, вы можете написать в разделе обсуждения ниже.
Оригинал: “https://dev.to/nadirbasalamah/java-tutorial-10-polymorphism-49af”