Informasi umum babagan konstruktor
Конструктор
minangka struktur sing padha karo metode, tujuane kanggo nggawe conto kelas. Karakteristik desainer:
- Jeneng konstruktor kudu cocog karo jeneng kelas (miturut konvensi, huruf pisanan dikapitalisasi, biasane tembung jeneng);
- Ana konstruktor ing sembarang kelas. Malah yen sampeyan ora nulis siji, compiler Jawa bakal nggawe konstruktor standar, kang bakal kosong lan nindakake apa-apa liyane saka nelpon konstruktor superclass.
- A konstruktor padha karo cara, nanging ora cara, iku ora malah dianggep minangka anggota saka kelas. Mulane, ora bisa diwarisake utawa diganti ing subclass;
- Konstruktor ora diwarisake;
- Bisa uga ana sawetara konstruktor ing kelas. Ing kasus iki, konstruktor ngandika overloaded;
- Yen kelas ora nemtokake konstruktor, compiler otomatis nambah konstruktor parameterless kanggo kode;
- Konstruktor ora duwe jinis bali; malah ora bisa dadi jinis
void
; yen jinis bali void
, mula ora dadi konstruktor nanging cara, sanajan ana kebetulan karo jeneng kelas.
- Operator diijini ing konstruktor
return
, nanging mung kosong, tanpa nilai bali;
- Konstruktor ngidini nggunakake modifiers akses; sampeyan bisa nyetel salah siji modifiers:
public
, protected
, private
utawa tanpa modifier.
- A konstruktor ora bisa duwe modifiers
abstract
, final
, native
, static
utawa synchronized
;
- Tembung kunci
this
nuduhake konstruktor liyane ing kelas sing padha. Yen digunakake, telpon kanggo iku kudu baris pisanan konstruktor;
- Tembung kunci kasebut
super
diarani konstruktor kelas induk. Yen digunakake, referensi kanggo iku kudu baris pisanan konstruktor;
- Yen konstruktor ora nelpon kanggo
super
konstruktor kelas leluhur (nganggo utawa tanpa bantahan), compiler otomatis nambah kode kanggo nelpon konstruktor kelas leluhur tanpa bantahan;
Konstruktor standar
Ana konstruktor ing sembarang kelas. Sanajan sampeyan ora nulis, kompiler Java bakal nggawe konstruktor standar. Konstruktor iki kosong lan ora nindakake apa-apa kajaba nelpon konstruktor superclass. Sing. yen sampeyan nulis:
public class Example {}
banjur iki padha karo nulis:
public class Example
{
Example()
{
super;
}
}
Ing kasus iki, kelas leluhur ora ditemtokake sacara eksplisit, lan minangka standar, kabeh kelas Jawa nduweni warisan kelas,
Object
mula konstruktor kelas kasebut diarani
Object
. Yen kelas nemtokake konstruktor karo paramèter, nanging ora ana konstruktor overloaded tanpa paramèter, banjur nelpon konstruktor tanpa paramèter iku kesalahan. Nanging, ing Jawa wiwit versi 1.5, sampeyan bisa nggunakake konstruktor kanthi argumen dawa variabel. Lan yen ana konstruktor sing nduweni argumen dawa variabel, banjur nelpon konstruktor standar ora bakal dadi kesalahan. Ora bakal amarga argumen dawa variabel bisa kosong. Contone, conto ing ngisor iki ora bakal kompilasi, nanging yen sampeyan uncomment konstruktor karo argumen dawa variabel, bakal ngumpulake lan mbukak kasil lan asil ing baris kode mlaku
DefaultDemo dd = new DefaultDemo()
; konstruktor bakal disebut
DefaultDemo(int ... v)
. Alami, ing kasus iki perlu nggunakake JSDK 1.5. File
DefaultDemo.java
class DefaultDemo
{
DefaultDemo(String s)
{
System.out.print("DefaultDemo(String)");
}
public static void main(String args[])
{
DefaultDemo dd = new DefaultDemo();
}
}
Asil saka output program karo konstruktor uncommented:
DefaultDemo(int ...)
Nanging, ing kasus umum ing ngendi kelas ora nemtokake konstruktor apa wae, nelpon konstruktor standar (tanpa paramèter) perlu, amarga substitusi konstruktor standar dumadi kanthi otomatis.
Nggawe obyek lan konstruktor
Nalika nggawe obyek, tumindak ing ngisor iki ditindakake kanthi urutan:
- Kelas obyek digoleki ing antarane kelas sing wis digunakake ing program kasebut. Yen ora ana, banjur digoleki ing kabeh katalog lan perpustakaan sing kasedhiya kanggo program kasebut. Sawise kelas ditemokake ing direktori utawa perpustakaan, lapangan statis kelas digawe lan diwiwiti. Sing. Kanggo saben kelas, kolom statis diinisialisasi mung sapisan.
- Memori diparengake kanggo obyek.
- Kolom kelas lagi diwiwiti.
- Konstruktor kelas dieksekusi.
- Link menyang obyek sing digawe lan diinisialisasi dibentuk. Referensi iki minangka nilai ekspresi sing nggawe obyek kasebut. Objek uga bisa digawe kanthi nelpon metode
newInstance()
kelas java.lang.Class
. Ing kasus iki, konstruktor tanpa dhaptar parameter digunakake.
Overloading konstruktor
Konstruktor kelas sing padha bisa duwe jeneng sing padha lan teken beda. Sifat iki diarani kombinasi utawa overloading. Yen kelas duwe pirang-pirang konstruktor, mula ana overloading konstruktor.
Parameterized Konstruktor
Tandha saka konstruktor yaiku nomer lan jinis paramèter, uga urutan jinis ing dhaptar paramèter konstruktor. Jinis bali ora dijupuk menyang akun. Konstruktor ora ngasilake paramèter. Pernyataan iki nerangake, kanthi cara, carane Jawa mbedakake antarane konstruktor utawa metode sing kakehan. Jawa mbedakake cara kakehan ora saka jinis bali, nanging dening nomer, jinis, lan urutan jinis paramèter input. Konstruktor ora bisa ngasilake jinis
void
, yen ora, bakal dadi cara biasa, sanajan padha karo jeneng kelas. Conto ing ngisor iki nuduhake iki. File
VoidDemo.java
class VoidDemo
{
VoidDemo()
{
System.out.println("Constructor");
}
void VoidDemo()
{
System.out.println("Method");
}
public static void main(String s[])
{
VoidDemo m = new VoidDemo();
}
}
Akibaté, program bakal ngasilake:
Constructor
Iki maneh mbuktekake manawa konstruktor minangka metode tanpa parameter bali. Nanging, konstruktor bisa diwenehi salah siji saka telung modifiers
public
, ,
private
utawa
protected
. Lan conto saiki bakal katon kaya iki: File
VoidDemo2.java
class VoidDemo2
{
public VoidDemo2()
{
System.out.println("Constructor");
}
private void VoidDemo2()
{
System.out.println("Method");
}
public static void main(String s[])
{
VoidDemo2 m = new VoidDemo2();
}
}
Diijini nulis operator ing konstruktor
return
, nanging mung kosong, tanpa nilai bali. File
ReturnDemo.java
class ReturnDemo
{
public ReturnDemo()
{
System.out.println("Constructor");
return;
}
public static void main(String s[])
{
ReturnDemo r = new ReturnDemo();
}
}
Konstruktor parameterized karo argumen variabel-dawa
Java SDK 1.5 ngenalake alat sing ditunggu-tunggu - argumen variabel dawa kanggo konstruktor lan metode. Sadurunge, macem-macem dokumen diproses kanthi rong cara sing ora trep. Pisanan mau dirancang kanggo mesthekake yen jumlah maksimum bantahan diwatesi kanggo nomer cilik lan dikenal ing advance. Ing kasus iki, iku bisa kanggo nggawe versi overloaded saka cara, siji kanggo saben versi dhaftar argumen liwati cara. Cara liya dirancang kanggo soko sing ora dingerteni sadurunge lan akeh argumen. Ing kasus iki, argumen diselehake ing array, lan array iki diterusake menyang metode kasebut. Argumen dawa variabel paling kerep melu manipulasi sakteruse karo initializations variabel. Iku trep kanggo ngganti anané sawetara saka konstruktor samesthine utawa bantahan cara karo nilai gawan. Argumen dawa variabel minangka array, lan dianggep minangka array. Contone, konstruktor kanggo kelas
Checking
kanthi nomer variabel argumen bakal katon kaya iki:
class Checking
{
public Checking(int ... n)
{
}
}
Kombinasi karakter ... ngandhani compiler yen nomer variabel argumen bakal digunakake, lan argumen kasebut bakal disimpen ing array sing nilai referensi ana ing variabel n. Konstruktor bisa diarani kanthi macem-macem argumen, kalebu ora ana argumen. Argumentasi kanthi otomatis diselehake ing larik lan liwati n. Yen ora ana argumen, dawane array yaiku 0. Dhaptar parameter, bebarengan karo argumen dawa variabel, bisa uga kalebu parameter wajib. Ing kasus iki, parameter sing ngemot nomer variabel argumen kudu dadi sing pungkasan ing dhaptar parameter. Tuladhane:
class Checking
{
public Checking(String s, int ... n)
{
}
}
Watesan sing jelas banget babagan jumlah parameter dawa variabel. Mesthine mung siji parameter dawa variabel ing dhaptar parameter. Diwenehi loro paramèter variabel-dawa, iku mokal kanggo compiler kanggo nemtokake ngendi siji parameter ends lan liyane wiwit. Tuladhane:
class Checking
{
public Checking(String s, int ... n, double ... d)
{
}
}
File
Checking.java
Contone, ana peralatan sing bisa ngenali plat mobil lan ngelingi nomer kothak ing wilayah ngendi saben mobil dibukak sak dina. Sampeyan kudu milih saka massa total mobil direkam sing sak dina dibukak loro kothak diwenehi, ngandika 22 lan 15, miturut peta wilayah. Iku cukup alam sing mobil bisa ngunjungi akeh kothak sak dina, utawa mung siji. Temenan, jumlah kothak sing dibukak diwatesi kanthi kacepetan fisik mobil. Ayo nggawe program cilik ngendi konstruktor kelas bakal njupuk minangka bantahan nomer mobil minangka parameter prentah lan nomer kothak dibukak saka wilayah, nomer kang bisa mawarni-warni. Konstruktor bakal mriksa apa mobil wis katon ing rong kothak; yen wis, banjur nuduhake nomer ing layar.
Maringake paramèter menyang konstruktor
Ana rong jinis paramèter ing basa pamrograman:
- jinis dhasar (primitif);
- referensi kanggo obyek.
Istilah panggilan kanthi nilai tegese konstruktor nampa nilai sing diterusake dening modul panggilan. Ing kontras, nelpon kanthi referensi tegese konstruktor nampa alamat variabel saka panelpon. Jawa mung nggunakake telpon miturut nilai. Miturut nilai parameter lan nilai pranala parameter. Jawa ora nggunakake telpon kanthi referensi kanggo obyek (sanajan akeh programer lan penulis sawetara buku ngaku iki). Nalika ngirim obyek menyang Jawa, paramèter ora liwati
kanthi referensi , nanging
kanthi nilai referensi obyek ! Ing kasus apa wae, konstruktor nampa salinan nilai kabeh paramèter. Konstruktor ora bisa nindakake karo paramèter input:
- konstruktor ora bisa ngganti nilai paramèter input saka jinis utama (primitif);
- konstruktor ora bisa ngganti referensi parameter input;
- konstruktor ora bisa reassign referensi parameter input kanggo obyek anyar.
Konstruktor bisa nindakake karo paramèter input:
- ngganti negara obyek liwati minangka parameter input.
Conto ing ngisor iki mbuktekake manawa ing Jawa, paramèter input menyang konstruktor dilewati kanthi nilai referensi obyek. Conto iki uga nuduhake yen konstruktor ora bisa ngganti referensi paramèter input, nanging bener ngganti referensi salinan paramèter input. File
Empoyee.java
class Employee
{
Employee(String x, String y)
{
String temp = x;
x = y;
y = temp;
}
public static void main(String args[])
{
String name1 = new String("Alice");
String name2 = new String("Mary");
Employee a = new Employee(name1, name2);
System.out.println("name1="+name1);
System.out.println("name2="+name2);
}
}
Output saka program yaiku:
name1=Alice
name2=Mary
Yen Jawa nggunakake telpon kanthi referensi kanggo pass obyek minangka parameter, konstruktor bakal ngganti
name1
lan ing conto iki
name2
. Konstruktor ora bakal ngganti referensi obyek sing disimpen ing variabel
name1
lan
name2
. Iki nuduhake yen paramèter konstruktor diwiwiti kanthi salinan referensi kasebut. Banjur konstruktor ngganti salinan kasebut. Nalika konstruktor ngrampungake karyane, variabel x lan y numpes, lan variabel asli
name1
terus
name2
ngrujuk menyang obyek sadurunge.
Ngganti paramèter liwati kanggo konstruktor.
Konstruktor ora bisa ngowahi paramèter liwat jinis dhasar. Nanging, konstruktor bisa ngowahi kahanan obyek sing dilewati minangka parameter. Contone, nimbang program ing ngisor iki: File
Salary1.java
class Salary1
{
Salary1(int x)
{
x = x * 3;
System.out.println("x="+x);
}
public static void main(String args[])
{
int value = 1000;
Salary1 s1 = new Salary1(value);
System.out.println("value="+value);
}
}
Output saka program yaiku:
x=3000
value=1000
Temenan, cara iki ora bakal ngganti parameter jinis utama. Mulane, sawise nelpon konstruktor, nilai variabel
value
tetep padha karo
1000
. Intine telung perkara sing kedadeyan:
- Variabel kasebut
x
diwiwiti kanthi salinan nilai parameter value
(yaiku, nomer 1000
).
- Nilai variabel
x
wis tikel telu - saiki padha karo 3000
. Nanging, nilai variabel value
tetep padha karo 1000
.
- Konstruktor mungkasi lan variabel
x
ora digunakake maneh.
Ing conto ing ngisor iki, gaji karyawan kasil tikel kaping telu amarga nilai referensi obyek dilewati minangka parameter kanggo metode kasebut. File
Salary2.java
class Salary2
{
int value = 1000;
Salary2()
{
}
Salary2(Salary2 x)
{
x.value = x.value * 3;
}
public static void main(String args[])
{
Salary2 s1 = new Salary2();
Salary2 s2 = new Salary2(s1);
System.out.println("s1.value=" +s1.value);
System.out.println("s2.value="+s2.value);
}
}
Output saka program yaiku:
s1.value=3000
s2.value=1000
Nilai referensi obyek digunakake minangka parameter. Nalika nglakokake baris
Salary2 s2 = new Salary2(s1)
; konstruktor
Salary2(Salary x)
bakal liwati Nilai referensi kanggo obyek variabel
s1
, lan konstruktor èfèktif bakal telung gaji kanggo
s1.value
, wiwit malah salinan
(Salary x)
digawe nang konstruktor TCTerms kanggo obyek variabel
s1
.
Konstruktor parameterized dening primitif.
Yen paramèter saka konstruktor overloaded nggunakake primitif sing bisa narrowed (contone
int <- double
), banjur nelpon cara karo nilai narrowed bisa, senadyan kasunyatan sing ora ana cara overloaded karo parameter kuwi. Contone: File
Primitive.java
class Primitive
{
Primitive(double d)
{
d = d + 10;
System.out.println("d="+d);
}
public static void main(String args[])
{
int i = 20;
Primitive s1 = new Primitive(i);
}
}
Output saka program yaiku:
d=30.0
Sanajan kasunyatane kelas kasebut
Primitive
ora duwe konstruktor sing duwe parameter jinis
int
, konstruktor kanthi parameter input bakal bisa digunakake
double
. Sadurunge nelpon konstruktor, variabel
i
bakal ditambahi saka jinis
int
menyang jinis
double
. Opsi ngelawan, nalika variabel
i
bakal dadi jinis
double
, lan konstruktor mung duwe parameter
int
, ing kahanan iki bakal nyebabake kesalahan kompilasi.
Telpon konstruktor lan operatornew
Konstruktor tansah diarani operator
new
. Nalika konstruktor diarani karo operator
new
, konstruktor tansah ngasilake referensi kanggo obyek anyar. Ora bisa meksa konstruktor kanggo mbentuk referensi kanggo obyek sing wis ana tinimbang referensi kanggo obyek anyar, kajaba kanthi ngganti obyek sing deserialized. Lan karo operator anyar, tinimbang referensi kanggo obyek anyar, iku mokal kanggo mbentuk referensi kanggo obyek wis ana. Contone: File
Salary3.java
class Salary3
{
int value = 1000;
Salary3()
{
}
Salary3(Salary3 x)
{
x.value = x.value * 3;
}
public static void main(String args[])
{
Salary3 s1 = new Salary3();
System.out.println("First object creation: "+s1.value);
Salary3 s2 = new Salary3(s1);
System.out.println("Second object creation: "+s2.value);
System.out.println("What's happend with first object?:"+s1.value);
Salary3 s3 = new Salary3(s1);
System.out.println("Third object creation: "+s3.value);
System.out.println("What's happend with first object?:"+s1.value);
}
}
Output saka program yaiku:
First object creation: 1000
Second object creation: 1000
What's happend with first object?: 3000
Third object creation: 1000
What's happend with first object?: 9000
Pisanan, nggunakake baris
Salary3 s1 = new Salary3()
; obyek anyar digawe. Sabanjure, yen nggunakake baris
Salary3 s2 = new Salary3(s1)
; utawa senar
Salary3 s3 = new Salary3(s1)
; bisa uga nggawe link menyang obyek sing wis ana, banjur
s1.value s2.value
padha
s3.value
nyimpen nilai sing padha
1000
. Bener ing baris
Salary3 s2 = new Salary3(s1)
; obyek anyar kanggo variabel bakal digawe
s2
lan negara obyek kanggo variabel bakal ngganti
s1
dening maringaken Nilai referensi kanggo obyek ing parameter konstruktor. Iki bisa diverifikasi kanthi asil output. Lan nalika nglakokake baris
Salary3 s3 = new Salary3(s1)
; obyek NEW kanggo variabel bakal digawe
s3
lan negara obyek kanggo variabel bakal diganti maneh
s1
.
Konstruktor lan pamblokiran initialization, urutan tumindak nalika nelpon konstruktor
Bagean
Nggawe Obyek lan Konstruktor nampilake tumindak umum sing ditindakake nalika nggawe obyek. Ing antarane yaiku proses nginisialisasi lapangan kelas lan nggarap konstruktor kelas, sing uga duwe urutan internal:
- Kabeh kolom data diinisialisasi dadi nilai standar (0, palsu, utawa null).
- Kabeh initializers lapangan lan pamblokiran initialization kaleksanan ing urutan padha kadhaptar ing deklarasi kelas.
- Yen konstruktor liyane diarani ing baris pisanan konstruktor, banjur konstruktor sing diarani dieksekusi.
- Awak konstruktor dieksekusi.
Konstruktor ana hubungane karo inisialisasi amarga ing Jawa ana telung cara kanggo miwiti lapangan ing kelas:
- nemtokake nilai ing deklarasi;
- nemtokake nilai ing blok initialization;
- nyetel nilai ing konstruktor.
Mesthi, sampeyan kudu ngatur kode initialization supaya gampang dingerteni. Kelas ing ngisor iki diwenehi minangka conto:
class Initialization
{
int i;
short z = 10;
static int x;
static float y;
static
{
x = 2000;
y = 3.141;
}
Initialization()
{
System.out.println("i="+i);
System.out.println("z="+z);
z = 20;
System.out.println("z="+z);
}
}
Ing conto ing ndhuwur, variabel diinisialisasi kanthi urutan ing ngisor iki: variabel statis diinisialisasi dhisik
x
kanthi
y
nilai standar. Sabanjure, blok initialization statis dieksekusi. Banjur variabel diinisialisasi
i
dadi nilai standar lan variabel diinisialisasi
z
. Sabanjure, desainer bakal kerja. Nelpon konstruktor kelas ngirim ora gumantung ing urutan kang lapangan diumumake. Iki bisa nyebabake kesalahan.
Konstruktor lan warisan
Konstruktor ora diwarisake. Tuladhane:
public class Example
{
Example()
{
}
public void sayHi()
{
system.out.println("Hi");
}
}
public class SubClass extends Example
{
}
Kelas
SubClass
kanthi otomatis marisi cara
sayHi()
sing ditetepake ing kelas induk. Ing wektu sing padha, konstruktor
Example()
kelas induk ora diwarisake dening turunane
SubClass
.
Tembung kunci this
ing konstruktor
Konstruktor digunakake
this
kanggo deleng konstruktor liyane ing kelas padha, nanging karo dhaftar paramèter beda. Yen konstruktor nggunakake tembung kunci
this
, mula kudu ana ing baris pisanan; ora nggatekake aturan iki bakal nyebabake kesalahan kompiler. Contone: File
ThisDemo.java
public class ThisDemo
{
String name;
ThisDemo(String s)
{
name = s;
System.out.println(name);
}
ThisDemo()
{
this("John");
}
public static void main(String args[])
{
ThisDemo td1 = new ThisDemo("Mary");
ThisDemo td2 = new ThisDemo();
}
}
Output saka program yaiku:
Mary
John
Ing conto iki ana loro konstruktor. Sing pisanan nampa argumen string. Kapindho ora nampa bantahan, mung nelpon konstruktor pisanan nggunakake jeneng standar "John". Mangkono, sampeyan bisa nggunakake konstruktor kanggo miwiti nilai lapangan kanthi eksplisit lan standar, sing asring dibutuhake ing program.
Tembung kunci super
ing konstruktor
Konstruktor digunakake
super
kanggo nelpon konstruktor superclass. Yen konstruktor nggunakake
super
, banjur telpon iki kudu ing baris pisanan, yen compiler bakal uncalan kesalahan. Ing ngisor iki conto: File
SuperClassDemo.java
public class SuperClassDemo
{
SuperClassDemo()
{
}
}
class Child extends SuperClassDemo
{
Child()
{
super();
}
}
Ing conto prasaja iki, konstruktor
Child()
ngemot telpon
super()
sing nggawe conto saka kelas
SuperClassDemo
, saliyane kelas
Child
. Amarga
super
kudu dadi statement pisanan sing dieksekusi ing konstruktor subclass, urutan iki tansah padha lan ora gumantung apa
super()
. Yen ora digunakake, konstruktor standar (ora ana paramèter) saben superclass, diwiwiti karo kelas dasar, bakal dieksekusi dhisik. Program ing ngisor iki nuduhake nalika konstruktor dieksekusi. File
Call.java
class A
{
A()
{
System.out.println("Inside A constructor.");
}
}
class B extends A
{
B()
{
System.out.println("Inside B constructor.");
}
}
class C extends B
{
C()
{
System.out.println("Inside C constructor.");
}
}
class Call
{
public static void main(String args[])
{
C c = new C();
}
}
Output saka program iki:
Inside A constructor.
Inside B constructor.
Inside C constructor.
Konstruktor diarani miturut urutan subordinasi kelas. Iki ndadekake sawetara pangertèn. Amarga superclass ora duwe kawruh babagan subclass, ikisialisasi sing kudu ditindakake kapisah. Yen bisa, iku kudu ndhisiki sembarang initialization dileksanakake dening subclass. Mulane kudu ditindakake dhisik.
Konstruktor sing bisa disesuaikan
Mekanisme identifikasi jinis run-time minangka salah sawijining prinsip inti sing kuat saka basa Jawa sing ngetrapake polimorfisme. Nanging, mekanisme kasebut ora nglindhungi pangembang saka jinis casting sing ora kompatibel ing sawetara kasus. Kasus sing paling umum yaiku manipulasi klompok obyek, macem-macem jinis sing ora dingerteni sadurunge lan ditemtokake ing wektu mlaku. Amarga kesalahan sing ana gandhengane karo jinis incompatibility mung bisa katon ing tataran runtime, iki ndadekake angel kanggo nggoleki lan ngilangi. Pambuka jinis adat ing Jawa 2 5.0 mindhah sawetara kasalahan iki saka runtime kanggo ngumpulake wektu lan nyedhiyani sawetara safety jinis ilang. Ora perlu casting jinis eksplisit nalika pindhah saka jinis
Object
menyang jinis konkrit. Sampeyan kudu eling yen alat kustomisasi jinis mung bisa digunakake karo obyek lan ora ditrapake kanggo jinis data primitif sing ana ing njaba wit warisan kelas. Kanthi jinis khusus, kabeh cast ditindakake kanthi otomatis lan ing mburi layar. Iki ngidini sampeyan nglindhungi saka jinis mismatching lan nggunakake maneh kode luwih kerep. Jinis khusus bisa digunakake ing konstruktor. Konstruktor bisa dadi adat sanajan kelase dudu jinis khusus. Tuladhane:
class GenConstructor
{
private double val;
<T extends Number> GenConstructor(T arg)
{
val = arg.doubleValue();
}
void printValue()
{
System.out.println("val: "+val);
}
}
class GenConstructorDemo
{
public static void main(String args[])
{
GenConstructor gc1 = new GenConstructor(100);
GenConstructor gc2 = new GenConstructor(123.5F);
gc1.printValue();
gc2.printValue();
}
}
Amarga konstruktor
GenConstructor
nemtokake parameter jinis khusus sing kudu dadi kelas asal saka kelas
Number
, bisa diarani saka sembarang
GO TO FULL VERSION