다형성:
---객체의 여러 형태
본질: 상위 클래스의 참조가 하위 클래스 객체를 가리킵니다.
---전제 조건 : 상속 또는 구현
class Animal{}
class Dog 확장 Animal{}
main{
Dog d = new Dog(); // 참 상태
Animal dog = new Dog(); //Polymorphic
}
참고: 다형성 형태를 통해 생성된 개체는 하위 클래스와 상위 클래스에 공통적인 멤버 메서드에 액세스합니다. 작업 결과, 하위 클래스에 고유한 멤버 메서드를 사용할 수 없습니다.
가상 메서드 호출:
상위 클래스 개체가 하위 클래스별 메서드를 호출합니다
Student S = new Student("Zhang San",100);
Person p = 신입생("李思",200);
System.out.println(S.say());
System.out.println(p.say ( ));
다형성 배열 - 참조 유형 배열에서 객체는 다형성 형식으로 저장됩니다.
예:Person[] person = {new Person("张三", 32),
new Student("lee思", 21, 120, 90.0),
새 학생("王五", 22, 119, 91.5),
새 선생님(" Teacher Liu", 35, 10, "Java EE"),
새 선생님( "Teacher Zhang", 11)};
다형성 매개변수 - 메소드 매개변수 목록의 참조 유형 매개변수
instanceof 연산자 - 객체가 지정된 유형인지 확인 (Shape)
강제 — 객체를 하나의 참조 도형에서 다른 참조 도형으로 변환
객체 연관:
한 객체가 다른 객체에서 사용됨
One- 일대일, 일대다, 다대일
class test4 { public static void main(String[] args){ Person p = new Person("王五",50); method(p); Student S = new Student("张三",100); method(S); Person p1 = new Student("赵四",100); method(p1); } public static void method(Person p){ if (p instanceof Student){ System.out.println("教师"); Student s = (Student)p; System.out.println("本态方法调用:"+p.say()); }else{ System.out.println("人"); } System.out.println(p.say()); } } class Person{ private String name; private int age; public Person(){} public Person(String name,int age){ this.name = name; this.age = age; } public String getName(){ return name; } public String say(){ return "姓名:"+name+"年龄:"+age; } } class Student extends Person{ private int id; private double score; public Student(String name,int id){ this(name,20,id,98.5); } public Student(String name,int age,int id,double score){ super(name,age); this.id = id; this.score = score; } public double getId(){ return id; } public String say(){ return super.say()+"学号:"+id+"分数:"+score; } }