기본 개념
다형성은 동일한 동작이 여러 가지 다른 표현이나 형태를 가질 수 있는 능력입니다.
다형성은 객체의 다양한 표현을 구현한 것입니다.
다형성 조건: 상속, 재작성, 상향 변환
동적 바인딩은 다형성 구현의 특정 형태입니다.
예제 연구
다음은 위 개념을 검증하기 위한 예이다.
// 车class Car { public void show(){ System.out.println("This is a car"); } }//丰田class Toyota extends Car{ public void show(){ System.out.println("This is a Japan car"); } }//别克class Buick extends Car{ public void show(){ System.out.println("This is a USA car"); } }public class Test{ public static void main(String[] args) { Car c1 = new Toyota(); Car c2 = new Buick(); c1.show(); c2.show(); // 打印内容: // This is a Japan car // This is a USA car } }
코드를 살펴보면 Car의 show 메소드를 호출하면 클래스의 다형성을 반영하는 다양한 내용이 출력됩니다. 동시에 이 예는 다형성이 발생하기 위한 세 가지 기본 조건도 충족합니다.
상속됨: Toyota와 Buick은 Car에서 상속
다시 쓰기: 토요타와 뷰익이 자동차의 쇼 방식을 다시 쓴다
상향적 변신: 도요타와 뷰익을 만들 때 상향이 일어난다. 뷰익 객체 변환
일반적인 주제를 살펴보겠습니다.
class A { public String show(A obj) { return ("A and A"); } public String show(D obj) { return ("A and D"); } } class B extends A { public String show(A obj) { return ("B and A"); } public String show(B obj) { return ("B and B"); } } class C extends B { } class D extends B { }public class Test { public static void main(String[] args) { A a1 = new A(); A a2 = new B(); B b = new B(); C c = new C(); D d = new D(); // 1.因此 B 是 A 的子类,调用类 A 的 show(A obj) 方法,输出:A and A System.out.println(a1.show(b)); // 2.因为 C 是 A 的子类,调用类 A 的 show(A obj) 方法,输出:A and A System.out.println(a1.show(c)); // 3.调用类 A 的 show(D obj) 方法,输出:A and D System.out.println(a1.show(d)); // 4.因为 B 向上转型成 A, 且 B 是 A 的子类,调用类 A 的 show(A obj) 方法 // 但是由于 B 中重写了 show(A obj) 方法,导致运行期间发生的动态绑定,调用 类 B 的 show(A obj) 方法 // ,输出:B and A System.out.println(a2.show(b)); // 5.同上 System.out.println(a2.show(c)); // 6.B 向上转型成 A,默认调用类 A 的 show(D obj) 方法,输出:A and D System.out.println(a2.show(d)); // 7.调用类 B 的 show(B obj) 方法,输出:B and B System.out.println(b.show(b)); // 8.C 是 B 的子类,调用类 B 的 show(B obj) 方法,输出:B and B System.out.println(b.show(c)); // 9.调用继承自类 A 的 show(D obj) 方法,输出:A and D System.out.println(b.show(d)); } }
생성자와 다형성
마찬가지로
class Parent { void print() { System.out.println("I am a Parent"); } Parent() { print(); } } class Son extends Parent { int num = 1; // 重写(override)了父类方法 void print() { System.out.println("I am a Son " + num); } Son() { print(); } }public class Test { public static void main(String[] args) { Son son = new Son(); /** * 输出内容: * I am a Son 0 * I am a Son 1 */ } }
를 예제를 통해 살펴보면, Parent의 생성자가 동적 바인딩으로 인해 Son의 print()를 호출하는 것을 볼 수 있습니다. num이 초기화되지 않았기 때문에 값은 0입니다.
기본 개념
다형성은 동일한 동작이 여러 가지 다른 표현이나 형태를 가질 수 있는 능력입니다.
다형성은 객체의 다양한 표현을 구현한 것입니다.
다형성 조건: 상속, 재작성, 상향 변환
동적 바인딩은 다형성 구현의 특정 형태입니다.
예시 연구
다음은 위의 개념을 검증하기 위한 예이다.
// 车class Car { public void show(){ System.out.println("This is a car"); } }//丰田class Toyota extends Car{ public void show(){ System.out.println("This is a Japan car"); } }//别克class Buick extends Car{ public void show(){ System.out.println("This is a USA car"); } }public class Test{ public static void main(String[] args) { Car c1 = new Toyota(); Car c2 = new Buick(); c1.show(); c2.show(); // 打印内容: // This is a Japan car // This is a USA car } }
코드를 살펴보면 Car의 show 메소드를 호출하면 클래스의 다형성을 반영하는 다양한 내용이 출력됩니다. 동시에 이 예는 다형성이 발생하기 위한 세 가지 기본 조건도 충족합니다.
상속됨: Toyota와 Buick은 Car에서 상속
다시 쓰기: 토요타와 뷰익이 자동차의 쇼 방식을 다시 쓴다
상향적 변신: 도요타와 뷰익을 만들 때 상향이 일어난다. 뷰익 객체 변환
일반적인 주제를 살펴보겠습니다.
class A { public String show(A obj) { return ("A and A"); } public String show(D obj) { return ("A and D"); } } class B extends A { public String show(A obj) { return ("B and A"); } public String show(B obj) { return ("B and B"); } } class C extends B { } class D extends B { }public class Test { public static void main(String[] args) { A a1 = new A(); A a2 = new B(); B b = new B(); C c = new C(); D d = new D(); // 1.因此 B 是 A 的子类,调用类 A 的 show(A obj) 方法,输出:A and A System.out.println(a1.show(b)); // 2.因为 C 是 A 的子类,调用类 A 的 show(A obj) 方法,输出:A and A System.out.println(a1.show(c)); // 3.调用类 A 的 show(D obj) 方法,输出:A and D System.out.println(a1.show(d)); // 4.因为 B 向上转型成 A,应该是调用类 A 的 show(A obj) 方法 // 由于 B 中重写了 show(A obj) 方法,实际调用 类 B 的方法,,输出:B and A System.out.println(a2.show(b)); // 5.同上 System.out.println(a2.show(c)); // 6.B 向上转型成 A,默认调用类 A 的 show(D obj) 方法,输出:A and D System.out.println(a2.show(d)); // 7.调用类 B 的 show(B obj) 方法,输出:B and B System.out.println(b.show(b)); // 8.C 是 B 的子类,调用类 B 的 show(B obj) 方法,输出:B and B System.out.println(b.show(c)); // 9.调用继承自类 A 的 show(D obj) 方法,输出:A and D System.out.println(b.show(d)); } }
생성자와 다형성
마찬가지로
class Parent { void print() { System.out.println("I am a Parent"); } Parent() { print(); } } class Son extends Parent { int num = 1; // 关键 -> 重写了父类的方法 void print() { System.out.println("I am a Son " + num); } Son() { print(); } }public class Test { public static void main(String[] args) { Son son = new Son(); // 输出内容: // I am a Son 0 // I am a Son 1 } }
의 분석 결과를 살펴보기 위해 예제를 사용합니다. 실제로는 세 가지 내용이 포함됩니다.
Son 인스턴스화 과정에서 생성자는 Parent, Parent의 생성자가 먼저 실행됩니다.
Son이 인쇄 방법을 재정의하므로 Parent는 Son의 재작성 방법을 호출합니다.
Parent에서는 num이 아직 초기화되지 않았기 때문에 값이 0입니다.
기본 개념
다형성은 동일한 동작이 여러 가지 다른 표현이나 형태를 갖는 능력입니다.
다형성은 객체의 다양한 표현을 구현한 것입니다.
다형성 조건: 상속, 재작성, 상향 변환
동적 바인딩은 다형성 구현의 특정 형태입니다.
예제 연구
다음은 위 개념을 검증하기 위한 예이다.
// 车class Car { public void show(){ System.out.println("This is a car"); } }//丰田class Toyota extends Car{ public void show(){ System.out.println("This is a Japan car"); } }//别克class Buick extends Car{ public void show(){ System.out.println("This is a USA car"); } }public class Test{ public static void main(String[] args) { Car c1 = new Toyota(); Car c2 = new Buick(); c1.show(); c2.show(); // 打印内容: // This is a Japan car // This is a USA car } }
코드를 살펴보면 Car의 show 메소드를 호출하면 클래스의 다형성을 반영하는 다양한 내용이 출력됩니다. 동시에 이 예는 다형성이 발생하기 위한 세 가지 기본 조건도 충족합니다.
상속됨: Toyota와 Buick은 Car에서 상속
다시 쓰기: 토요타와 뷰익이 자동차의 쇼 방식을 다시 쓴다
상향적 변혁: 도요타와 뷰익을 만들 때 상향이 일어난다. 뷰익 객체 변환
일반적인 주제를 살펴보겠습니다.
class A { public String show(A obj) { return ("A and A"); } public String show(D obj) { return ("A and D"); } } class B extends A { public String show(A obj) { return ("B and A"); } public String show(B obj) { return ("B and B"); } } class C extends B { } class D extends B { }public class Test { public static void main(String[] args) { A a1 = new A(); A a2 = new B(); B b = new B(); C c = new C(); D d = new D(); // 1.因此 B 是 A 的子类,调用类 A 的 show(A obj) 方法,输出:A and A System.out.println(a1.show(b)); // 2.因为 C 是 A 的子类,调用类 A 的 show(A obj) 方法,输出:A and A System.out.println(a1.show(c)); // 3.调用类 A 的 show(D obj) 方法,输出:A and D System.out.println(a1.show(d)); // 4.因为 B 向上转型成 A, 且 B 是 A 的子类,调用类 A 的 show(A obj) 方法 // 但是由于 B 中重写了 show(A obj) 方法,导致运行期间发生的动态绑定,调用 类 B 的 show(A obj) 方法 // ,输出:B and A System.out.println(a2.show(b)); // 5.同上 System.out.println(a2.show(c)); // 6.B 向上转型成 A,默认调用类 A 的 show(D obj) 方法,输出:A and D System.out.println(a2.show(d)); // 7.调用类 B 的 show(B obj) 方法,输出:B and B System.out.println(b.show(b)); // 8.C 是 B 的子类,调用类 B 的 show(B obj) 方法,输出:B and B System.out.println(b.show(c)); // 9.调用继承自类 A 的 show(D obj) 方法,输出:A and D System.out.println(b.show(d)); } }
생성자와 다형성
마찬가지로
class Parent { void print() { System.out.println("I am a Parent"); } Parent() { print(); } } class Son extends Parent { int num = 1; // 重写(override)了父类方法 void print() { System.out.println("I am a Son " + num); } Son() { print(); } }public class Test { public static void main(String[] args) { Son son = new Son(); /** * 输出内容: * I am a Son 0 * I am a Son 1 */ } }
를 예제를 통해 살펴보면, Parent의 생성자가 동적 바인딩으로 인해 Son의 print()를 호출하는 것을 볼 수 있습니다. num이 초기화되지 않았기 때문에 값은 0입니다.
분석 결과에는 실제로 세 가지 내용이 포함됩니다.
Son 인스턴스화 과정에서 Parent 생성자와 Parent 생성자가 먼저 실행됩니다.
Son이 인쇄 방법을 재정의하므로 Parent는 Son의 재작성 방법을 호출합니다.
Parent에서는 num이 아직 초기화되지 않았기 때문에 값이 0입니다.
위 내용은 03.Java 기본 - 다형성 컨텐츠에 대한 자세한 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于结构化数据处理开源库SPL的相关问题,下面就一起来看一下java下理想的结构化数据处理类库,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于PriorityQueue优先级队列的相关知识,Java集合框架中提供了PriorityQueue和PriorityBlockingQueue两种类型的优先级队列,PriorityQueue是线程不安全的,PriorityBlockingQueue是线程安全的,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于java锁的相关问题,包括了独占锁、悲观锁、乐观锁、共享锁等等内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于多线程的相关问题,包括了线程安装、线程加锁与线程不安全的原因、线程安全的标准类等等内容,希望对大家有帮助。

本篇文章给大家带来了关于Java的相关知识,其中主要介绍了关于关键字中this和super的相关问题,以及他们的一些区别,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于枚举的相关问题,包括了枚举的基本操作、集合类对枚举的支持等等内容,下面一起来看一下,希望对大家有帮助。

封装是一种信息隐藏技术,是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法;封装可以被认为是一个保护屏障,防止指定类的代码和数据被外部类定义的代码随机访问。封装可以通过关键字private,protected和public实现。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于设计模式的相关问题,主要将装饰器模式的相关内容,指在不改变现有对象结构的情况下,动态地给该对象增加一些职责的模式,希望对大家有帮助。


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

mPDF
mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

DVWA
DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

PhpStorm 맥 버전
최신(2018.2.1) 전문 PHP 통합 개발 도구
