抽象類的出現,只要是為了規範子類的方法的命名,抽象類不能建立物件,是因為抽象類中含有抽象方法,所以抽象類是不完整的,假若抽象類可以建立物件的話,建立出來的物件要呼叫抽象類的方法,而抽象方法無調調用,就會出錯,所以抽象類無法建立物件。
介面類的出現原因和抽象類差不多,但是抽象類和介面還是有很大的差別的,反映在:抽象類是類,介面類是介面,類是單根繼承的,而介面是多繼承的,乙個類只能繼承乙個父類,而乙個類可以實現多個介面,乙個介面可以繼承多個介面。
下面來說說抽象物件和介面向上轉型的問題:眾所周知,抽象類和介面都是不能建立物件的,但是子類的向上轉型中,抽象類和介面又可以接受來自子類向上轉型建立的物件,由於介面和抽象類的原因一樣,所以就以
抽象類為例來說明:
複製**
1 class abstract pet67
89 class cat extends pet
1819 }
2021
2223 public class test
複製**
來解釋一下為什麼不能建立物件的抽象父類pet在此處可以有乙個物件 p,其實 在記憶體空間的 儲存的是cat開闢的空間,所以p其實是cat的物件,只是給了他乙個父類的外表而已,所以抽象父類可以接受來自子類的向上轉型的物件,介面也相同。
pet p =new cat(); 只有 new cat() 才是建立物件, pet p 只是乙個變數,並不是建立物件。
向上轉型:本來是子類的型別,賦給了乙個父類的變數,向上轉了乙個型別,所以叫向上轉型。
向上轉型之後呼叫方法,依然是呼叫子類的方法,是因為記憶體中開闢的空間存放的依然是子類的物件。
向上轉型後的父類物件,無法呼叫子類的自有方法(只有子類有,父類沒有,無論修飾符是public還是private),那這是為什麼呢?明明記憶體中存放的是子類的物件啊? 這是因為將子類的物件賦給了父類的變數,在父類的類體中,沒有找到這個方法,
所以無法呼叫。
向下轉型,只有經過向上轉型的父類物件,才可以向下轉型。
為什麼只有經過向上轉型的父類物件,才可以向下轉型, 而不能直接不經過向上轉型,父類物件就直接向下轉型呢? 因為子類的功能往往更加豐富,子類的自有方法父類不能呼叫,所以不能直接向下轉型。
向上轉型後,呼叫子類和父類的同名方法,搞不清了可以記住就近原則,是子類的實體,所以肯定先呼叫子類的方法,子類沒有了才使用父類的方法
8 抽象類 介面 多型 向上轉型 向下轉型
一 final關鍵字 1 可以修飾變數 方法 類 2 修飾變數時,變數的值不能再改變,成為乙個常量 3 修飾方法時,被修飾的方法不能被修改 4 修飾類時,這個類不能被繼承,並且類中的成員方法會隱式地被final修飾 5 當final修飾乙個引用型別時,此時這個引用型別變數指向的物件不能改變,不能再指...
關於抽象類和介面
1 什麼是抽象類 包含抽象方法的類叫做抽象類,抽象類中並不都是抽象方法 2.什麼時候建立抽象方法 當父類中對這個方法沒有實現沒有任何的實際意義,而在子類中實現有其意義,這時候就可以把這種方法成乙個抽象的方法,這個類就成了抽象的類 3.抽象類和普通類的區別 1 抽象方法必須為public或者prote...
物件導向 介面類 抽象類
python 沒有介面這個概念 介面類,抽象類 制定乙個規範.介面類,抽象類 python中就是一樣的 1,歸一化設計.2,制定乙個規範,凡是繼承我類的類,必須有我規定的方法.第一版class alipay def init self,money self.money money defpay se...