1. 程式人生 > >父子類的向上轉型和向下轉型

父子類的向上轉型和向下轉型

首先從一個例子看:
class A { 
    double f(double x, double y) { 
        return x + y; 
    } 
    static int g(int n) { 
        return n * n; 
    } 
} 
class B extends A { 
    double f(double x, double y) { 
        double m = super.f(x, y); 
        return m + x * y; 
    } 
    static int g(int n) { 
        int m = A.g(n); 
        return m + n; 
    } 
} 
public class PrintMethod { 
    public static void main(String[] args) { 
        A a = new B( ); 
        System.out.println(a.f(10.0, 8.0)); 
        System.out.println(a.g(3)); 
    } 
}

輸出的結果為:98.0和9

解析:A a = new B( );(BA的子類 A的索引指向B的物件a;建立了一個A型別,B的一個物件;也就是建立了一個B的物件a,是A型別的。也就是向上轉型;

由於子類可以繼承父類的靜態方法,但是不能重寫父類的靜態方法,所以本題中a.g(3)是呼叫的是父類的g()方法;而a.f(10.0, 8.0)則是呼叫的是子類的f()方法。

注:不論向上或者向下轉型,“編譯看左邊,執行看右邊”。也就是編譯時候,會看左邊引用型別是否能正確編譯通過,執行的時候是呼叫右邊的物件的方法。

從下面的一個例子來再一次說明:

例子:

A a = new B();例項化一個子類物件a,這個是典型的多型

相當於:動物 a=new()//這就為向上轉型   

a.發聲();  //物件a可以使用動物中的發聲()或其他方法,但不可以呼叫狗的方法。

A a = new A();例項化一個父類的物件a

動物 a=new();狗b=()a//這裡是向下轉型

這時b可呼叫動物類未被重寫的方法和狗類所有方法(包括重寫動物類的方法)

向上轉型都會成功,是安全的。就像說狗是動物沒問題。但通過b若呼叫 動物 或 狗類中任意方法都報異常,也就是說向下轉型可能會出錯 不能說動物是狗

相關推薦

父子向上轉型轉型

首先從一個例子看:class A {     double f(double x, double y) {         return x + y;     }     static in

JavaSE(五)JAVA對象向上轉型轉型

open 其他 解釋 編譯 -- 運行出錯 instance xtend args 今天做了一個測試的題目,發現自己還是很多問題沒有靜下心來做。很多問題是可以自己解決的但是自己一是沒有讀清題意,二是自己心裏太急躁了。所以這個要自己應以為鑒! 對象的轉型問題其實並不復雜,我

JAVA向上轉型轉型

子類 font new ont java向上轉型 clas 之間 string output   最近在看JAVA編程思想,之前學的JAVA只能算是皮毛,大概看到第七章繼承時出現了個名詞-向上轉型。所以就來討論下向上和向下轉型的內容和意義,內容會隨著我看書的進度一直更新的

JAVA的向上轉型 轉型

向上轉型 是面向物件繼承的一種形式,是指子類物件轉換為父類物件。 看下面的example class Instrument { public void play() { System.out.println("Instrument play"); }

java——向上轉型轉型

Father f1 = new Son(); // 這就叫 upcasting (向上轉型) // 現在 f1 引用指向一個Son物件 Son s1 = (Son)f1; // 這就叫 downcasting (向下轉型) // 現在f1 還是指向 Son物件 Father f2 =

java語言機制中的多型多型理解以及多型的向上轉型轉型問題

多型中轉型問題往往不容易理解,特別是向上和向下轉型。 下面先說說多型的概念和前提: 1.要有繼承關係; 2.要有方法重寫; 3.要有父類引用指向子類物件; 如果是成員變數的話,編譯看左邊(父類),執行看左邊(子類); 如果是成員方法的話,編譯看左邊(父類),執行看右邊(子類)

向上轉型轉型

向上轉型:把子類物件轉成父類型別,即父類的引用指向子類物件。 A為父類,B為子類。 A b = new B(); 向上轉型時會執行子類重寫父類的方法,以及父類特有的方法。但是會丟失子類中特有的方法和資料。 向下轉型:把父類物件轉成子類型別,即將子類的引用指向父類

java學習-向上轉型轉型

一,多型 在設計一個方法的時候,通常希望該方法具備一定的通用性。比如實現一個動物叫的方法,每個動物的叫聲是不一樣的,可以在方法中接收一個動物型別的引數,當傳入貓類物件的時候就發出喵的聲音,相對傳入狗的物件就發出汪的聲音。同一個方法這種應為引數不同而導致執行效果不同的現象叫做

多型之向上轉型轉型

向上轉型:         將子類物件轉換為父類物件 : Father f = new Son(); 這樣產生的物件f,將會擁有父類的屬性和子類的方法。當然,子類的方法複寫了父類的方法,輸出的結果自然是父類的。而f的屬性卻依舊是父類時候的屬性值。舉個栗子

Java多型中的向上轉型轉型

向上轉型:將一個父類的引用指向一個子類物件,稱為向上轉型,自動進行型別轉換     用法: Father f = new Son(); 向下轉型:子類引用指向父類引用的子類物件  通俗的說就是子類例項物件賦值給父類引用,然後父類引用又要賦值給子類引用,這個過程就是向下轉型

面向物件中的多型,物件的向上轉型轉型

多型 首先什麼是多型? 多型就是一種事物的多種形態. 建立多型的前提需要滿足三個條件: 1.首先類與類之間要建立聯絡,即需要有繼承關係 2.子類中一定要有方法的重寫 3.最重要的是一定要有父類的指標指向子類的物件或者說父類的引用指向子類的空間 下面

物件型別的轉換(向上轉型轉型

1 //父類 2 class Parent 3 { 4 public static String kind="javastudy.extendsstudy.parent"; 5 public static int age=50; 6 pu

c++中向上轉型轉型,動態轉換,靜態轉換詳解

子類轉換為父類:向上轉型,使用dynamic_cast<type_id>(expression),這種轉換相對來說比較安全不會有資料的丟失; 父類轉換為子類:向下轉型,可以使用強制轉換,這

關於Java繼承的 向上轉型轉型

在Java中, 向上轉型(upcasting)和向下轉型(downcasting)的前提,必須是有“繼承關係”,向上轉型是自動的,向下轉型需要進行強轉。 例如: /**定義了一個“父”類*/ public class Father { /**姓名

C#向上轉型轉型

子類物件賦給父類型別的變數,稱為向上轉型。父類型別的物件賦給子類型別的變數,稱為向下轉型。上個例子,Vegetable是父類,Potato是子類。namespace ConsoleApplication1{ class Vegetable { public

java繼承向上轉型轉型動態繫結

1 概念: 把引用變數轉化為子類型別,則成為向下轉型。如果把引用變數轉化為父類型別,則成為向上轉型。  Java程式碼 publicclass Base {   /**       * 父類例項變數       */    String var = "baseVar";   /**      

JAVA向上轉型轉型(一)

   在我們工作的時候通常會看到這樣的程式碼: Map<String,Object> m = new HashMap<String,Object>(); List<Object> l = new ArrayList<Object&

理解“向上轉型轉型”的簡單例子

import static net.mindview.util.Print.*; class Useful{ public void f(){print("Useful:f()");} public void g(){print("Useful

基本數據型轉換之向上轉型轉換

顯式 上轉型 類型轉化 基本 轉換 字符 隱式 nbsp 相互 向上轉換: 整型,字符型,浮點型的數據在混合運算中相互轉換,轉換時遵循以下原則: 容量小的類型可自動轉換為容量大的數據類型; byte,short,char → int → long → float → dou

Java向上轉型轉型(子的物件賦給父的)

一.定義:    通俗理解向上轉型:    就是子類轉型成父類。   classA   {   }   classBextendsA   {   }   A b=new B();   這個就是向上轉型。   向上轉型可以像下面這條語句這麼簡單:   Shape s =new Circle();   這裡,建