java
다형성 Java에서 상속에 의해 서로 관련된 하나 이상의 클래스 또는 객체가 있을 때 발생합니다. 여러 형태를 취할 수 있는 개체의 능력입니다. 상속을 통해 사용자는 속성과 메서드를 상속할 수 있으며 다형성은 이러한 메서드를 사용하여 다른 작업을 수행합니다. 그래서 목표는 소통이지만 접근 방식이 다릅니다.
예를 들어 통신용 스마트폰이 있습니다. 선택한 통신 모드는 무엇이든 될 수 있습니다. 전화, 문자, 사진, 메일 등이 될 수 있습니다. 그래서 목표는 소통이라는 공통점이 있지만 접근 방식이 다릅니다. 이것을 다형성이라고 합니다. 이제 예제를 통해 Java의 다형성을 배우겠습니다.
이 Java 자습서에서는 다음을 배우게 됩니다.
동영상에 액세스할 수 없는 경우 여기를 클릭하십시오.
입출금 기능이 있는 '계정'이라는 부모 클래스가 있습니다. 계정에 2개의 하위 클래스가 있습니다.
입출금의 동작은 예금과 당좌예금과 동일합니다. 따라서 Account 클래스에서 상속된 메서드가 작동합니다.
<중앙>
<그림>자바 다형성 예제
그림>
요구 사항 사양이 변경되었습니다. 이는 소프트웨어 업계에서 흔히 볼 수 있는 일입니다. 당좌 대월 기능이 있는 기능 권한 은행 계좌를 추가해야 합니다.
배경으로, 당좌 대월은 귀하의 계정에서 사용 가능한 잔액보다 많은 금액을 인출할 수 있는 기능입니다.
따라서 권한이 있는 철회 방법을 새로 구현해야 합니다. 그러나 당신은 저축 및 당좌 예금 계좌에서 테스트한 코드를 변경하지 않습니다. 이것이 OOPS의 장점입니다.
1단계) 계정을 저장하기 위한 "출금" 메소드가 호출되면 상위 계정 클래스의 메소드가 실행되도록 합니다.
2단계) 그러나 특권 계정에 대한 “Withdraw” 메소드(초과인출 기능)가 호출되면 특권 클래스에 정의된 인출 메소드가 실행됩니다. 이것은 OOP의 다형성입니다.
메서드 재정의는 하위 클래스의 슈퍼 클래스 메서드를 재정의하는 것입니다.
예
class Doctor{ public void treatPatient(){ // treatPatient method } class Surgeon extends Doctor{ public void treatPatient(){ // treatPatient method } } Class run{ public static void main (String args[]){ Doctor doctorObj = new Doctor() // treatPatient method in class Doctor will be executed doctorObj.treatPatient(); Surgeon surgeonObj = new Surgeon(); // treatPatient method in class Surgeon will be executed surgeonObj.treatPatient(); } }
메서드 재정의 | |
---|---|
메서드 오버로딩은 동일한 클래스에 있으며 둘 이상의 메서드는 이름은 같지만 서명은 다릅니다. | 메서드 재정의는 상위 클래스의 메서드 중 하나가 하위 클래스에서 재정의되는 경우입니다. 이 경우 메서드의 서명은 동일하게 유지됩니다. |
예: void sum (int a , int b); void sum (int a , int b, int c); void sum (float a, double b); | 예: class X{ public int sum(){ // some code } } class Y extends X{ public int sum(){ //overridden method //signature is same } } |
OOP의 동적 다형성은 슈퍼클래스와 서브클래스에서 동일한 이름과 서명으로 여러 메서드를 정의할 수 있는 메커니즘입니다. 재정의된 메서드에 대한 호출은 런타임에 해결됩니다.
상위 클래스의 참조 변수는 하위 클래스 개체를 참조할 수 있습니다.
Doctor obj = new Surgeon();
진술을 고려하십시오
obj.treatPatient();
여기에서 참조 변수 "obj"는 부모 클래스의 것이지만 가리키는 객체는 자식 클래스의 것입니다(아래 다이어그램 예제에서 다형성의 예와 같이).
obj.treatPatient()는 하위 클래스의 TreatPatient() 메서드를 실행합니다 – Surgeon
기본 클래스 참조가 메서드를 호출하는 데 사용되는 경우 호출할 메서드는 참조가 가리키는 개체에 따라 JVM에 의해 결정됩니다.
예를 들어 obj는 Doctor에 대한 참조이지만 Surgeon 개체를 가리키므로 Surgeon의 메서드를 호출합니다.
이는 런타임 중에 결정되므로 동적 이라고 합니다. 또는 런타임 다형성
Java의 Static Polymorphism은 컴파일 시에 메소드를 호출하기 위한 정보를 수집하는 다형성의 일종이고, Dynamic Polymorphism은 런타임에 메소드를 호출하기 위한 정보를 수집하는 다형성의 일종입니다.
정적 다형성 | 동적 다형성 |
---|---|
메소드 오버로딩과 관련이 있습니다. | 메서드 재정의와 관련이 있습니다. |
오류가 있는 경우 컴파일 시 해결됩니다. 코드는 컴파일 중에 실행되지 않으므로 이름은 static입니다. 예: void sum (int a , int b); void sum (float a, double b); int sum (int a, int b); //compiler gives error. | 참조 변수가 재정의된 메서드를 호출하는 경우 호출할 메서드는 참조 변수가 가리키는 객체에 의해 결정됩니다. 이것은 코드가 실행 중일 때 런타임에만 결정할 수 있으므로 이름이 dynamic입니다. 예: //reference of parent pointing to child object Doctor obj = new Surgeon(); // method of child called obj.treatPatient(); |
Surgeon 클래스의 TreatPatient 메서드가 Doctor 클래스에 정의된 기능을 실행한 다음 고유한 특정 기능을 수행하려는 경우 어떻게 해야 합니까?
이 경우 키워드 super
자식 클래스에서 부모 클래스의 메서드에 액세스하는 데 사용할 수 있습니다.
Surgeon 클래스의 TreatPatient 메서드는 다음과 같이 작성할 수 있습니다.
treatPatient(){ super.treatPatient(); //add code specific to Surgeon }
키워드 super는 하위 클래스에 있는 상위 클래스의 모든 데이터 멤버 또는 메서드에 액세스하는 데 사용할 수 있습니다.
다음으로 예제 프로그램을 통해 Java의 Super 키워드, 상속 및 다형성에 대해 알아보겠습니다.
예:-상속, 다형성 및 슈퍼 키워드 배우기
1단계) 다음 코드를 편집기에 복사
public class Test{ public static void main(String args[]){ X x= new X(); Y y = new Y(); y.m2(); //x.m1(); //y.m1(); //x = y;// parent pointing to object of child //x.m1() ; //y.a=10; } } class X{ private int a; int b; public void m1(){ System.out.println("This is method m1 of class X"); } } class Y extends X{ int c; // new instance variable of class Y public void m1(){ // overriden method System.out.println("This is method m1 of class Y"); } public void m2(){ super.m1(); System.out.println("This is method m2 of class Y"); } }
2단계) 코드를 저장, 컴파일 및 실행합니다. 출력을 관찰하십시오.
3단계) # 6-9 행의 주석을 제거합니다. 코드를 저장, 컴파일 및 실행합니다. 출력을 관찰하십시오.
4단계) 주석 제거 라인 # 10 . 코드를 저장하고 컴파일하세요.
5단계) 오류 =? 이는 하위 클래스가 상위 클래스의 private 멤버에 액세스할 수 없기 때문입니다.
java
자바에서 리플렉션이란 무엇입니까? Java Reflection은 런타임에 클래스의 모든 기능을 분석하고 수정하는 프로세스입니다. Java의 Reflection API는 런타임에 필드, 메소드, 생성자 등을 포함하는 클래스 및 해당 멤버를 조작하는 데 사용됩니다. Java에서 리플렉션 API의 한 가지 장점은 클래스의 private 멤버도 조작할 수 있다는 것입니다. java.lang.reflect 패키지는 리플렉션을 구현하는 많은 클래스를 제공합니다. java.lang.Class 클래스의 java.Methods는 특정 클래스의
Python의 OOP Python의 OOP 다른 일반 프로그래밍 언어와 동일하게 객체와 클래스를 사용하는 데 중점을 둔 프로그래밍 접근 방식입니다. 개체는 모든 실제 엔터티가 될 수 있습니다. Python을 사용하면 개발자가 코드 재사용성에 중점을 둔 OOP 접근 방식을 사용하여 애플리케이션을 개발할 수 있습니다. Python에서 클래스와 객체를 만드는 것은 매우 쉽습니다. 수업이란 무엇입니까? Python의 클래스는 데이터와 함수의 논리적 그룹입니다. 임의의 콘텐츠를 포함하고 따라서 쉽게 액세스할 수 있는 데이터 구조를 자유