간단히 말하면, 서로 다른 객체는 동일한 동작을 완성하지만 서로 다른 상태를 생성합니다.
아주 간단한 예: 학교의 특정 수업에 속한 학생들은 시험이 끝난 후 동일한 시험을 봅니다. 시험점수도 다르고, 낙제하는 사람도 있고, 합격선을 헤매는 사람도 있고, 높은 점수를 받은 사람도 있습니다. 그럼 당신은 어느 정도 수준인가요~( ̄▽ ̄)~
얼마나 달성해야 하는지 조건이 있나요? 구체적인 조건은 다음과 같습니다.
1. 상속 시스템에 있어야 하며 상향 변환이 발생했습니다.
2. 하위 클래스는 상위 클래스의 메서드를 다시 작성해야 합니다.
3. 메소드
위에 관련된 몇 가지 새로운 개념은 아래에 자세히 소개됩니다.
우리는 이전에 작성한 클래스를 수정합니다.
class Plant { String name; String source; String genu; public void func() { System.out.println("父类方法"); } } class Tree extends Plant { public void trait() { System.out.println("子类方法"); } }
소위 상향 변환은 하위 클래스를 생성하는 것입니다. 객체를 부모 클래스로 사용하세요
구체적인 연산은 다음과 같습니다.
Plant tree=new Tree();
부모 클래스로 사용되기 때문에 현재 트리는 서브 클래스의 메서드를 호출할 수 없습니다
하향 변환이 있습니다 Java, 그러나 하향 변환은 안전하지 않기 때문에 건너뜁니다.
위의 예는 첫 번째 예입니다: 직접 할당
또한 메소드 매개변수로 두 가지 형태
가 있습니다
메소드
의 반환 값은 하위 클래스가 상위 클래스의 메소드를 다시 작성한다는 의미이며, 이 메소드는 생성자가 될 수 없으며 private, final 또는 static으로 수정할 수도 없습니다. 우리가 다시 작성하는 것은 메소드의 내용입니다. 메소드 이름, 반환 값 및 메소드 매개변수는 수정할 수 없습니다.
클래스는 여전히 수정됩니다.
class Plant { String name; String source; String genu; public void trait() { System.out.println("父类方法"); } } class Tree extends Plant { @Override //注解,此注解可以进行一些合法性校验 public void trait() { System.out.println("子类方法"); } }
상향 변환 후 특성을 호출한 결과가 무엇인지 살펴보겠습니다.
서브 클래스의 메소드가 호출되는 것인데, 이것이 다시 쓰기의 특징이기도 합니다
사실 컴파일 중에는 상위 클래스의 메소드가 호출되는데, 오버라이드된 메소드만 해당됩니다. 실행 단계에서 어떤 메서드를 호출할지 결정합니다(즉, 동적 바인딩) 이것이 재작성과 오버로딩의 근본적인 차이점이기도 합니다
1.static, final, private 수정 메서드와 생성자 메서드는 다시 작성할 수 없습니다
2. 하위 클래스 메서드 액세스 권한은 상위 클래스보다 크거나 같아야 합니다
3. JDK7 이후에는 재정의된 메서드의 반환 값 유형이 다를 수 있지만 부모-자식 관계가 있어야 합니다. 공변 유형
4. 생성자 메서드에서 재정의된 메서드를 호출하지 마세요.
마지막 사항은 별도로 설명합니다. 하위 클래스의 생성자가 먼저 해당 클래스의 생성자를 호출하므로 부모 클래스의 생성자가 재정의된 메서드를 호출한다고 가정합니다. 따라서 하위 클래스의 개체는 완전히 구성되기 전에 동적입니다. 바인딩은 다시 작성된 메서드를 호출합니다. 이 경우 상향 변환 및 다시 작성을 이해하고 나면 프로그램 문제가 발생할 확률이 크게 높아집니다. Java에서 다형성 구현: 상속 시스템에서 상향 변환을 결합하여 다형성을 달성합니다
위 내용은 Java 다형성의 개념은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!