> Java > Java시작하기 > Java 객체 지향 - 다형성에 대한 자세한 소개

Java 객체 지향 - 다형성에 대한 자세한 소개

王林
풀어 주다: 2019-11-30 14:21:33
앞으로
3077명이 탐색했습니다.

Java 객체 지향 - 다형성에 대한 자세한 소개

1. 개요

다형성은 캡슐화와 상속에 이어 객체지향의 세 번째 주요 특징입니다.

예를 들어, 인생에서 달리는 동작, 새끼 고양이, 강아지, 코끼리는 다르게 달립니다. 또 다른 예는 비행의 움직임입니다. 곤충, 새, 비행기도 다르게 날아갑니다. 동일한 행동이 다른 사물을 통해 다른 형태로 나타날 수 있음을 알 수 있습니다. 다형성은 이 상태를 설명합니다.

다형성:

은 동일한 동작이 여러 가지 다른 형태로 나타나는 것을 의미합니다.

전제조건 [핵심사항]

1. 상속 또는 구현 [둘 중 하나 선택]

2. 메소드 재작성 [의미: 재작성 없음, 의미 없음]

3. object [형식 반영]

무료 온라인 학습 영상 추천 : java video

2. 다형성 발현

다형성 발현 형식 :

父类类型 变量名 = new 子类对象; 
变量名.方法名();
로그인 후 복사

부모 클래스 유형 : 자식 클래스가 상속받은 부모 클래스를 의미 객체 유형 또는 구현된 상위 인터페이스 유형.

코드는 다음과 같습니다.

Fu f = new Zi(); 
f.method();
로그인 후 복사

다형성을 사용하여 메소드를 호출할 때 먼저 해당 메소드가 상위 클래스에 존재하는지 확인하십시오. 존재하지 않으면 컴파일 오류가 발생합니다. 하위 클래스가 실행됩니다.

코드는 다음과 같습니다.

상위 클래스 정의:

Java 객체 지향 - 다형성에 대한 자세한 소개

하위 클래스 정의:

Java 객체 지향 - 다형성에 대한 자세한 소개

테스트 클래스 정의:

Java 객체 지향 - 다형성에 대한 자세한 소개

3. 다형성의 이점

실제 개발 과정 메소드에서는 상위 클래스 유형을 메소드 형식 매개변수로 사용하여 하위 클래스 객체를 메소드에 전달하고 메소드를 호출하는데, 이는 다형성의 확장성과 편의성을 더 잘 반영할 수 있습니다.

코드는 다음과 같습니다.

부모 클래스 정의:

Java 객체 지향 - 다형성에 대한 자세한 소개

하위 클래스 정의:

Java 객체 지향 - 다형성에 대한 자세한 소개

테스트 클래스 정의:

public class Test {
    public static void main(String[] args) {
        // 多态形式,创建对象
        // Cat c = new Cat();
        // Dog d = new Dog();

        // 调用showCatEat showCatEat(c);
        // 调用showDogEat
        showDogEat(d);

        /*
        以上两个方法, 均可以被showAnimalEat(Animal a)方法所替代而执行效果一致
        */
        showAnimalEat(c);
        showAnimalEat(d);
    }

    public static void showCatEat(Cat c) {
        c.eat();
    }

    public static void showDogEat(Dog d) {
        d.eat();
    }

    public static void showAnimalEat(Animal a) {
        a.eat();
    }
}
로그인 후 복사

eat 메서드가 실행되면 다형성은 해당 메서드가 재정의됨을 규정합니다. 하위 클래스에 의해 실행되면 효과는 자연스럽게 showCatEat 및 showDogEat 메소드와 일치하므로 showAnimalEat는 위의 두 메소드를 완전히 대체할 수 있습니다.

단순한 대체가 아니라 확장성 측면에서 향후 몇 개의 하위 클래스가 나타나더라도 showXxxEat 메서드를 작성할 필요가 없으며 showAnimalEat를 직접 사용하여 완료할 수 있습니다.

그래서 다형성의 장점은 프로그램을 더 쉽게 작성하고 확장성을 높일 수 있다는 것입니다.

4. 참조 유형 변환

다형성 변환은 상향 변환과 하향 변환의 두 가지 유형으로 나뉩니다.

상향 변환

상향 변환: 다형성 자체가 상위 클래스 유형에 대한 하위 클래스 유형입니다. 업컨버전 프로세스에서는 이 프로세스가 기본값입니다.

상위 클래스 참조가 하위 클래스 객체를 가리키는 경우 이는 상향 변환입니다.

사용 형식:

父类类型 变量名 = new 子类类型(); 
如:Animal a = new Cat();
로그인 후 복사

Downcast

상위 클래스 유형을 하위 클래스 유형으로 하향 변환하는 과정은 필수입니다.

상향 변환된 하위 클래스 객체. 상위 클래스 참조를 하위 클래스 참조로 변환하려면 하향 변환인 강제 유형 변환 형식을 사용할 수 있습니다.

형식 사용:

子类类型 变量名 = (子类类型) 父类变量名; 
如 :Cat c =(Cat) a;
로그인 후 복사

Transformation 데모, 코드는 다음과 같습니다.

클래스 정의:

Java 객체 지향 - 다형성에 대한 자세한 소개

테스트 클래스 정의:

Java 객체 지향 - 다형성에 대한 자세한 소개

변환 예외

转型的过程中,一不小心就会遇到这样的问题,请看如下代码:

Java 객체 지향 - 다형성에 대한 자세한 소개

这段代码可以通过编译,但是运行时,却报出了ClassCastException,类型转换异常!这是因为,明明创建了Cat类型对象,运行时,当然不能转换成Dog对象的。这两个类型并没有任何继承关系,不符合类型转换的定义。

为了避免ClassCastException的发生,Java提供了 关键字,给引用变量做类型的校验。

格式如下:

变量名 instanceof 数据类型
如果变量属于该数据类型,返回true。
如果变量不属于该数据类型,返回false。
로그인 후 복사

所以,转换前,我们最好先做一个判断,代码如下:

Java 객체 지향 - 다형성에 대한 자세한 소개

想学习更多相关教程请访问:java入门学习

위 내용은 Java 객체 지향 - 다형성에 대한 자세한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:csdn.net
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿