kotlin 中使用關鍵字 class 宣告類
class animal
類宣告由類名、類頭(指定其型別引數、主建構函式等)以及由花括號包圍的類體構成。類頭與類體都是可選的;
如果乙個類沒有類體,可以省略花括號。
class animal
在 kotlin 中的乙個類可以有乙個主建構函式以及乙個或多個次建構函式。
主建構函式
主建構函式是類頭的一部分:它跟在類名(與可選的型別引數)後。
class man constructor(name: string)
如果主建構函式沒有任何註解或者可見性修飾符,可以省略這個 constructor 關鍵字。
class man (name: string)
可見性修飾符
kotlin 中有這四個可見性修飾符:private、 protected、 internal 和 public。
如果建構函式有註解或可見性修飾符,這個 constructor 關鍵字是必需的,並且這些修飾符在它前面:
class man public constructor(name: string)
函式、屬性和類、物件和介面可以在頂層宣告,即直接在包內
如果你不指定任何可見性修飾符,預設為 public,這意味著你的宣告將隨處可見;
如果你宣告為 private,它只會在宣告它的檔案內可見;
如果你宣告為 internal,它會在相同模組內隨處可見;
protected 不適用於頂層宣告。
對於類內部宣告的成員:
private 意味著只在這個類內部(包含其所有成員)可見;
protected 和 private一樣 + 在子類中可見。
internal 能見到類宣告的 本模組內 的任何客戶端都可見其 internal 成員;
public 能見到類宣告的任何客戶端都可見其 public 成員。
初始化的**可以放到以 init 關鍵字作為字首的初始化塊(initializer blocks)中。
class animal
} var animal = animal()
println("animal ---"+animal.name)
//this is animal!
//animal ---動物
可以寫多個init{},會按順序執行
次建構函式
類也可以宣告字首有 constructor的次建構函式:
class man
constructor(name :string)
constructor(name :string,age :int)
constructor(name :string,age :int,score :int)
} val man = man("辯護人")
val xiuman = man("泰秀",18)
val zhongman = man("一中",18,88)
輸出system.out: init ---
system.out: name --- 辯護人
system.out: init ---
system.out: name ---泰秀 ---- age : 18
system.out: init ---
system.out: name ---一中 ---- age : 18 ----- score : 88
init {}**塊會優先於次建構函式執行
建立類的例項
直接呼叫建構函式即可。kotlin 中沒有 new 關鍵字
val man = man("辯護人")
在 kotlin 中所有類都有乙個共同的超類 any,這對於沒有超型別宣告的類是預設超類:
class example //從 any 隱式繼承
any 有三個方法:equals()、 hashcode() 與 tostring()
/**
* the root of the kotlin class hierarchy. every kotlin class has [any] as a superclass.
*/public open class any
宣告乙個顯式的超型別,在類頭中把超型別放到冒號之後即可:
如果派生類有乙個主建構函式,其基型別必須用基類的主構造函式引數就地初始化。
open class an(
var name :string
)class person(name: string):an(name)
如果派生類沒有主建構函式,那麼每個次建構函式必須使用 super 關鍵字初始化其基型別,
class customview : view
覆蓋方法
對於可覆蓋的成員(我們稱之為開放)以及覆蓋後的成員需要顯式修飾符:
open class animal()
fun eat()
}class horse() : animal()
}
horse.run() 函式上必須加上 override 修飾符。不加會報錯。
eat()方法子類不可以重寫。
open 修飾符對新增了final的類不起作用。
派生類中的**可以使用 super 關鍵字呼叫其超類的函式與屬性訪問器的實現:
open class animal()
fun eat()
open var total : int = 100;
var age :int = 18
}class horse() : animal()
override var total = 99
var horseage = super.age
}
覆蓋規則
如果乙個類從它的直接超類繼承相同成員的多個實現, 它必須覆蓋這個成員並提供其自己的實現。
為了表示採用從哪個超型別繼承的實現,我們使用由尖括號中超型別名限定的 super:
open class pen()
}//介面成員預設就是「open」的
inte***ce colourpen
}class *****() : pen(),colourpen
}
抽象類
類以及其中的某些成員可以宣告為 abstract。
可以用乙個抽象成員覆蓋乙個非抽象的開放成員。
open class pen()
}abstract class brushpen : pen()
派生類繼承時必須重寫draw()方法
class blackpen : brushpen()
}
《Inside C 》筆記 四 類
類是對資料結構和演算法的封裝。一 類成員 類成員包括以下幾類,作者在後面的章節會詳細講解。字段 用來儲存資料,可用static readonly const來修飾 方法 運算元據的 屬性 用來控制對類內部變數的訪問 常量 索引器 事件和運算子。二 訪問修飾符 public 可被外部的類和派生類訪問 ...
c 學習筆記(四) 類和結構
類的預設訪問許可權是private 結構是public 該關鍵字修飾的變數可以在類的const方法中修改 class node 建議使用如下方式 正確 constref constref int ii i ii ci ii ri ii 錯誤 constref constref int ii 原因 效...
C 練習(四)類和物件
構建乙個類book,其中含有兩個私有資料成員qu和price,建立乙個有5個元素的陣列物件,將qu初始化1 5,將price初始化為qu的10倍。顯示每個物件的qu price。標頭檔案book.h includeusing namespace std class book book成員函式.cpp...