java隨手筆記三之多態,java多態
多態:
---一個對象的多種形態
實質:父類的引用指向子類對象
---前提:必須有繼承或者是實現
class Animal{}
class Dog extends Animal{}
main{
Dog d = new Dog(); //本態
Animal dog = new Dog(); //多態
}
注意:通過多態形式創建的對象,只能訪問子父類共有的成員方法,運行結果為子類結果是子類特有的成員方法不能方法。
虛擬方法調用:
父類對象調用子類特有的方法
Student S = new Student("張三",100);
Person p = new Student("李四",200);
System.out.println(S.say());
System.out.println(p.say());
多態數組 — 在引用類型的數組中,使用多態形式存放對象。
eg:Person[] person = {new Person("張三", 32),
new Student("李四", 21, 120, 90.0),
new Student("王五", 22, 119, 91.5),
new Teacher("劉老師", 35, 10, "Java EE"),
new Teacher("張老師", 11)};
多態參數 — 方法參數列表中的引用類型參數
instanceof運算符 — 判斷一個對象是否為指定類型(形態)
強制類型轉換 — 將對象從一種引用形態轉換為另一種引用形態
對象關聯:
一個對象中使用了另一個對象
一對一,一對多,多對一
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;
}
}