다형성 개요
- 다형성 은 캡슐화 및 상속 이후 객체 지향의 세 번째 특성입니다.
- 다형성에 대한 실질적인 의미와 개인적인 이해를 위해 :
- 다형성 : 동일한 참조가 동일한 메서드를 호출하지만 다른 작업을 수행합니다.
- 실제 사물은 종종 학생, 학생은 사람의 범주에 속하고 특정 반 친구 인 장산은 학생과 사람의 범주 모두에 속합니다. 즉, 여러 가지 형태가 있습니다. 다형성.
- 객체 지향 언어로서 Java는 사물의 여러 형태를 설명 할 수도 있습니다. Student 클래스가 People 클래스를 상속하는 경우 Student의 개체는 Student와 People입니다.
-
다형성은 부모 클래스 참조 변수에 반영되어 자식 클래스 개체를 가리킬 수 있습니다.
참고 : 다형성 부모 클래스 참조 변수를 사용하여 메서드를 호출하면 하위 클래스 다시 작성된 메서드가 호출됩니다. -
다형성의 정의 및 사용 형식
定义格式:父类类型 变量名=new 子类类型();
-
이해:
多态是同一个行为具有多个不同表现形式或形态的能力。 多态就是同一个接口,使用不同的实例而执行不同操作。
6. 다형성의 몇 가지 장점 :
인터페이스, 다형성은 수퍼 클래스가 메서드 시그니처를 통해 서브 클래스에 공통 인터페이스를 제공하고 서브 클래스가이를 달성하거나 재정의한다는 것입니다.
대체 가능성, 다형성은 기존 코드를 대체
할 수 있습니다 . 확장 성, 다형성은 추가 할 수 있습니다. 기존 클래스의 다형성, 상속 및 기타 특성의 작동 및 작동에 영향을주지 않고 새로운 하위 클래스,
유연성, 다형성은 매우 유연합니다.
다섯 번째, 단순성, 응용 프로그램 소프트웨어 코드 작성 및 수정 프로세스를 단순화합니다. .
다형성 멤버의 특성
class People{
private int num=6;
int vis=666;
public void eat() {
System.out.println("米饭");
}
public void getNum() {
System.out.println(num);
}
}
class Student extends People{
private int num=10;
int vis=66;
public void eat() {
System.out.println("炸鸡");
}
public void study() {
System.out.println("good good study");
}
public void getNum() {
System.out.println(num);
}
}
public static void main(String[] args) {
People p=new Student();
System.out.println(p.vis);//
p.eat();
p.getNum();
//输出
//666
//炸鸡
//10
- 다형성 멤버 변수 :
부모 클래스의 변수 값만 얻을 수 있습니다. - 다형성 멤버 메서드 :
하위 클래스에 의해 재정의 된 메서드를 호출하지만 부모 클래스의 메서드 여야합니다.
상향 변환
사용 형식 : 부모 유형 변수 이름 = new subtype type ();
적용 가능한 시나리오 : 하위 유형 유형을 직면 할 필요가없는 경우 확장 성을 개선하거나 부모 클래스의 기능을 사용하여 해당 작업을 완료 할 수 있습니다.
** 이해 : ** 상위 클래스의 메서드를 사용하지만 하위 클래스에 의해 재정의 된 메서드를 호출합니다.
다운 캐스트
사용 형식 : 하위 클래스 유형 변수 이름 = (하위 클래스 유형) 부모 유형 변수,
** 적용 가능한 시나리오 : 하위 클래스의 고유 기능을 사용하려는 경우. **
** 이해 : ** 하위 범주를 사용하여 문제 해결
코드 샘플 표시
package ParentAndBase;
class People{
private int num=6;
public void eat() {
System.out.println("米饭");
}
public void getNum() {
System.out.println(num);
}
}
class Student extends People{
private int num=10;
public void eat() {
System.out.println("炸鸡");
}
public void study() {
System.out.println("good good study");
}
public void getNum() {
System.out.println(num);
}
}
class Teacher extends People{
public void eat() {
System.out.println("拉面");
}
public void study() {
System.out.println("day day up");
}
}
public class Demo {
public static void main(String[] args) {
People p=new Student();//向上转型
p.eat();
p.getNum();
Student stu=(Student)p;//向下转型
stu.study();
stu.eat();
People pp=new Teacher();
pp.eat();
}
}
요약하자면 :
Java实现多态有三个必要条件:继承、重写、向上转型。
继承:在多态中必须存在有继承关系的子类和父类。
重写:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法。
向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才能够具备技能调用父类的方法和子类的方法。
只有满足了上述三个条件,我们才能够在同一个继承结构中使用统一的逻辑实现代码处理不同的对象,从而达到执行不同的行为。
对于Java而言,它多态的实现机制遵循一个原则:当超类对象引用变量引用子类对象时,被引用对象的类型而不是引用变量的类型决定了调用谁的成员方法,但是这个被调用的方法必须是在超类中定义过的,也就是说被子类覆盖的方法。