向上轉型---父類引用指向子類對象 A a = New B()的使用

一。向上轉型spa

      向上轉型是JAVA中的一種調用方式,是多態的一種表現。向上轉型並不是是將B自動向上轉型爲A的對象,相反它是從另外一種角度去理解向上兩字的:它是對A的對象的方法的擴充,即A的對象可訪問B從A中繼承來的和B重A的方法,其它的方法都不能訪問,包括A中的私有成員方法。code

 

class Father{
    
    public void sleep(){
        System.out.println("Father sleep");
    }
 
    public void eat() {
        System.out.println("Father eat");
    }
}
 
class Son extends Father {
    
    public void eat() {
        System.out.println("son eat");//重寫父類方法
    }
    
    //子類定義了本身的新方法
    public void newMethods() {
        System.out.println("son method");
    }
}
 
public class Demo {
 
    public static void main(String[] args) {
        
        Father a = new Son();
        a.sleep();
        a.eat();
        
        //a.methods();    /*報錯:The method methods() is undefined for the type Father*/
    }
}

一、a實際上指向的是一個子類對象,因此能夠訪問Son類從Father類繼承的方法sleep()和重寫的方法eat()對象

二、因爲向上轉型,a對象會遺失和父類不一樣的方法,如methods();blog

簡記:A a = New B()是new的子類對象,父類的引用指向它。兒子本身掙的東西,父親不能訪問。父親給兒子留下的(extends)或者兒子重寫父親的東西,父親才能訪問繼承

答案:io

Father sleepfunction

son eatclass

二。靜態方法不能算方法的重寫擴展

class Father {
    public int num = 100;
 
    public void show() {
        System.out.println("show Father");
    }
 
    public static void function() {
        System.out.println("function Father");
    }
}
 
class Son extends Father {
    public int num = 1000;
    public int num2 = 200;
 
    public void show() {
        System.out.println("show Son");
    }
 
    public void method() {
        System.out.println("method Son");
    }
 
    public static void function() {
        System.out.println("function Son");
    }
}
 
public class DuoTaiDemo {
    public static void main(String[] args) {
        // 要有父類引用指向子類對象。
        // 父 f = new 子();
        Father f = new Son();
        System.out.println(f.num);
        // 找不到符號
        // System.out.println(f.num2);
         f.show();
        // 找不到符號
        // f.method();
        f.function();
    }
}

答案:引用

100

show Son

function Father

向上轉型的目的是規範和擴展,提升代碼的維護性和擴展性

相關文章
相關標籤/搜索