class day6_26_1{
public static void mian(String[] args){
Fu2 fu2 = new Zi2();//父類引用子類物件
fu2.print();//fu
}
}
class Fu2{
public void print(){
System.out.println("fu");
}
}
class Zi2 extends Fu2{//有繼承關係
public void print(){
System.out.println("zi");
}
}
/*
多型
什麼是多型?
多種狀態
是指一個物件在不同的時刻,表現出來的不同形態
比如說:一個水滴,分為液態-氣態-固態
多型的前提條件?
1,要有繼承關係
2,要有方法重寫
3,要有父類引用指向子類物件
成員變數
口訣:編譯看左邊,執行看左邊
成員方法
口訣:編譯看左邊,執行看右邊
靜態方法(static)
口決:編譯看左邊,執行看左邊
class Fu2{
public void print(){
}
}
class Zi2 extends Fu2{//有繼承關係
public void print(){//有方法重寫
}
}
class Demo{
public static void mian(String[] args){
Fu2 fu2 = new Zi2();//父類引用子類物件
}
}
*/
/*
多型間子父類之間成員變數的關係?
父類中有一個成員變數,子類中有一個成員變數
如果兩個變數的名字不同的話:
class Fu2{
int i = 1;
}
class Zi2 extends Fu2{//有繼承關係
int j = 2;
}
class day6_25_2{
public static void mian(String[] args){
Fu2 fu2 = new Zi2();//父類引用子類物件
System.out.println(fu2.i);
System.out.println(fu2.j);//編譯報錯
}
}
透過結果分析,父類引用中不能使用子類的成員變數
如果兩個變數的名字不同的話:
class Fu2{
int i = 1;
}
class Zi2 extends Fu2{//有繼承關係
int i = 2;
}
class day6_25_2{
public static void mian(String[] args){
Fu2 fu2 = new Zi2();//父類引用子類物件
System.out.println(fu2.i);
}
}
透過結果分析,父類引用只能使用自身帶的成員變數,不能使用子類中的成員變數
多型間子父類之間成員方法的關係?
父類中有一個成員方法,子類中有一個成員方法
class Fu2{
public void printfu(){
System.out.println("fu");
}
}
class Zi2 extends Fu2{//有繼承關係
public void printzi(){
System.out.println("zi");
}
}
class day6_25_2{
public static void mian(String[] args){
Fu2 fu2 = new Zi2();//父類引用子類物件
fu2.printfu();//fu
fu2.printzi();//編譯報錯
}
}
透過結果分析,父類中不能使用子類特有的方法
如果兩個方法的名字相同的話:
class day6_26_1{
public static void mian(String[] args){
Fu2 fu2 = new Zi2();//父類引用子類物件
fu2.print();//zi
}
}
class Fu2{
public void print(){
System.out.println("fu");
}
}
class Zi2 extends Fu2{//有繼承關係
public void print(){
System.out.println("zi");
}
}
透過結果分析,父類引用可以使用子類中重寫父類的方法
*/