Base Class Constructor

9.1.3 Base Class Constructor

Sebuah derived class dapat memanggil constructor dari base class-nya. Ini dilakukan

d engan menggunakan keyword base.

publ i c c l as s Tok en {

publ i c T ok en( s t r i ng name) { // c odes } }

publ i c c l as s Comment Tok en: Tok en {

publ i c Comment Tok en( s t r i ng name) : bas e( name) { / / c odes } }

Tanda titik dua yang diikuti constructor dari base class disebut sebagai constructor initializ er.

Selanjutnya, perhatikan contoh code dengan constructor tanpa parameter berikut:

publ i c c l as s Tok en {

publ i c Tok en( ) { // c odes } }

U ntuk memanggil consturctor dari base class anda dapat menulis constructor initializer secara eksplisit seperti:

publ i c c l as s Comment Tok en: Tok en {

publ i c Comment Tok en( ) : bas e( ) {

/ / c odes } }

Akan tetapi, jika derive d class tidak secara eksplisit memanggil constructor dari base

c lass diatas, C# compiler akan secara implisit memanggil constructor initializer. Contoh code berikut adalah valid:

publ i c c l as s Comment Tok en: Tok en {

publ i c Comment Tok en( ) / /

i mpl i s i t

{ / / c odes } }

Hal ini dimungkinkan karena:

D i dalam .NET, sebuah class yang tidak memiliki base class yang eksplisit akan secara implisit men-derive class System.Object yang memiliki constructor tanpa parameter. Jika se buah class tidak me mpunyai constructor, secara automatis compiler C# akan membuat sebu ah constructor public tan pa parameter yang disebut default constructor.

Akan tetapi, jik di su a atu class sudah memiliki constructor-nya sendiri, compi ler C# tidak akan m em buat default constru ctor. Akibatnya, jika sebuah derived class memiliki

c onstru cto r yang tidak ada ‘pasangan’ yang sama di base-class-nya, code anda akan error. Contoh:

publ i c c l as s Tok en {

publ i c Tok e n( s t r i ng name) { // c odes } }

publ i c c l as s Comment Tok en: Tok en {

publ i c Comment Tok en( s t r i ng name) / / i nv al i d {

/ / c odes } }

Error t erjadi karena secara implisit, con sructor CommentToken memiliki constructor initializer “: base()”, sementara class Token tidak memiliki constructor tanpa parameter Error t erjadi karena secara implisit, con sructor CommentToken memiliki constructor initializer “: base()”, sementara class Token tidak memiliki constructor tanpa parameter

P erlu diperhatikan juga bahwa, access modifier constructor berlaku sama dengan access mo difier method biasa lainnya. Ar tinya, jika sebuah constructor adalah public, dia

dapat di a kse s dari luar class, sedangkan jika sua tu constructor adalah private, dia hanya bisa di akses oleh class itu sendiri.

Selanjutnya, coba perhatikan kembali contoh code berikut:

publ i c c l as s Bas e {

pr ot ec t ed s t r i ng nama; }

pub lic

c l as s Der i v ed: Bas e { publ i c s t r i ng Nama( ) { r et ur n nama; } }

Karena sebuah derived class dapat mem iliki member dengan nama yang sama dengan base class, akan lebih baik jika menggunakan keyword base untuk mengakses member base c lass d i suatu derived class. Sehingga contoh code diatas dapat ditulis ar :

publ i c c l as s Der i v ed: Bas e {

publ i c s t r i ng Nama( ) { r et ur n bas e. nama; } }