java
다형성은 다양한 형태를 취할 수 있는 개체의 능력입니다. OOP에서 다형성의 가장 일반적인 사용은 부모 클래스 참조가 자식 클래스 개체를 참조하는 데 사용될 때 발생합니다.
둘 이상의 IS-A 테스트를 통과할 수 있는 모든 Java 객체는 다형성으로 간주됩니다. 자바에서 모든 자바 객체는 다형성입니다. 어떤 객체도 자신의 유형과 객체 클래스에 대한 IS-A 테스트를 통과할 것이기 때문입니다.
개체에 액세스할 수 있는 유일한 방법은 참조 변수를 통해서라는 것을 아는 것이 중요합니다. 참조 변수는 한 가지 유형일 수 있습니다. 한 번 선언된 참조 변수의 유형은 변경할 수 없습니다.
참조 변수는 final로 선언되지 않은 경우 다른 개체에 다시 할당할 수 있습니다. 참조 변수의 유형은 개체에서 호출할 수 있는 메서드를 결정합니다.
참조 변수는 선언된 유형의 모든 개체 또는 선언된 유형의 하위 유형을 참조할 수 있습니다. 참조 변수는 클래스 또는 인터페이스 유형으로 선언할 수 있습니다.
예를 살펴보겠습니다.
public interface Vegetarian{} public class Animal{} public class Deer extends Animal implements Vegetarian{}
이제 Deer 클래스는 다중 상속이 있기 때문에 다형성으로 간주됩니다. 다음은 위의 예에 해당합니다. -
참조 변수 사실을 Deer 개체 참조에 적용할 때 다음 선언은 유효합니다. −
Deer d = new Deer(); Animal a = d; Vegetarian v = d; Object o = d;
모든 참조 변수 d, a, v, o는 힙에서 동일한 Deer 개체를 참조합니다.
이 섹션에서는 Java에서 재정의된 메서드의 동작을 통해 클래스를 디자인할 때 다형성을 활용할 수 있는 방법을 보여 드리겠습니다.
우리는 이미 자식 클래스가 부모의 메서드를 재정의할 수 있는 메서드 재정의에 대해 논의했습니다. 재정의된 메서드는 기본적으로 부모 클래스에 숨겨져 있으며 자식 클래스가 재정의 메서드 내에서 super 키워드를 사용하지 않는 한 호출되지 않습니다.
/* File name : Employee.java */ public class Employee { private String name; private String address; private int number; public Employee(String name, String address, int number) { System.out.println("Constructing an Employee"); this.name = name; this.address = address; this.number = number; } public void mailCheck() { System.out.println("Mailing a check to " + this.name + " " + this.address); } public String toString() { return name + " " + address + " " + number; } public String getName() { return name; } public String getAddress() { return address; } public void setAddress(String newAddress) { address = newAddress; } public int getNumber() { return number; } }
이제 다음과 같이 Employee 클래스를 확장한다고 가정합니다. -
/* File name : Salary.java */ public class Salary extends Employee { private double salary; // Annual salary public Salary(String name, String address, int number, double salary) { super(name, address, number); setSalary(salary); } public void mailCheck() { System.out.println("Within mailCheck of Salary class "); System.out.println("Mailing check to " + getName() + " with salary " + salary); } public double getSalary() { return salary; } public void setSalary(double newSalary) { if(newSalary >= 0.0) { salary = newSalary; } } public double computePay() { System.out.println("Computing salary pay for " + getName()); return salary/52; } }
이제 다음 프로그램을 주의 깊게 연구하고 결과를 결정하려고 합니다.
/* File name : VirtualDemo.java */ public class VirtualDemo { public static void main(String [] args) { Salary s = new Salary("Mohd Mohtashim", "Ambehta, UP", 3, 3600.00); Employee e = new Salary("John Adams", "Boston, MA", 2, 2400.00); System.out.println("Call mailCheck using Salary reference --"); s.mailCheck(); System.out.println("\n Call mailCheck using Employee reference--"); e.mailCheck(); } }
이것은 다음 결과를 생성합니다 -
Constructing an Employee Constructing an Employee Call mailCheck using Salary reference -- Within mailCheck of Salary class Mailing check to Mohd Mohtashim with salary 3600.0 Call mailCheck using Employee reference-- Within mailCheck of Salary class Mailing check to John Adams with salary 2400.0
여기서는 두 개의 Salary 개체를 인스턴스화합니다. 급여 참조 사용 , 다른 하나는 직원 참조 e를 사용합니다. .
s.mailCheck()를 호출하는 동안 , 컴파일러는 컴파일 시 Salary 클래스의 mailCheck()를 보고 JVM은 런타임 시 Salary 클래스의 mailCheck()를 호출합니다.
e의 mailCheck() 때문에 상당히 다릅니다. 직원 참조입니다. 컴파일러가 e.mailCheck()를 볼 때 , 컴파일러는 Employee 클래스의 mailCheck() 메서드를 봅니다.
여기에서 컴파일 시간에 컴파일러는 Employee의 mailCheck()를 사용하여 이 명령문의 유효성을 검사합니다. 그러나 런타임에 JVM은 Salary 클래스에서 mailCheck()를 호출합니다.
이 동작을 가상 메서드 호출이라고 하며 이러한 메서드를 가상 메서드라고 합니다. 재정의된 메서드는 컴파일 시간에 소스 코드에서 사용된 참조 데이터 유형에 관계없이 런타임에 호출됩니다.
java
자바 데크 인터페이스 이 튜토리얼에서는 Deque 인터페이스, 사용 방법 및 방법에 대해 알아봅니다. Deque Java 컬렉션 프레임워크의 인터페이스는 양방향 대기열의 기능을 제공합니다. Queue를 확장합니다. 인터페이스. 데크 작업 일반 대기열에서 요소는 뒤쪽에서 추가되고 앞쪽에서 제거됩니다. 그러나 deque에서는 전면과 후면 모두에서 요소를 삽입 및 제거할 수 있습니다. . Deque를 구현하는 클래스 Deque의 기능을 사용하려면 인터페이스를 구현하는 클래스를 사용해야 합니다. 배열 데크 링크드리스트
자바에서 다형성이란 무엇입니까? 다형성 Java에서 상속에 의해 서로 관련된 하나 이상의 클래스 또는 객체가 있을 때 발생합니다. 여러 형태를 취할 수 있는 개체의 능력입니다. 상속을 통해 사용자는 속성과 메서드를 상속할 수 있으며 다형성은 이러한 메서드를 사용하여 다른 작업을 수행합니다. 그래서 목표는 소통이지만 접근 방식이 다릅니다. 예를 들어 통신용 스마트폰이 있습니다. 선택한 통신 모드는 무엇이든 될 수 있습니다. 전화, 문자, 사진, 메일 등이 될 수 있습니다. 그래서 목표는 소통이라는 공통점이 있지만 접근 방식이 다릅