锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
鏋勯犳柟娉曞繀欏繪弧瓚充互涓嬫潯浠訛細
l. 鏂規硶鍚嶅繀欏諱笌綾誨悕縐板畬鍏ㄧ浉鍖歸厤錛?
2. 涓嶈澹版槑榪斿洖綾誨瀷錛?
3. 涓嶈兘琚玸tatic銆乫inal銆乻ynchronized銆乤bstract銆乶ative淇グ銆?
涓嬪垪浠g爜涓殑鏋勯犳柟娉曢兘鏄悎娉曠殑銆?
public class Xyz {
public Xyz() { // No-arg constructor
// set up the object.
}
public Xyz(int x) { //int-arg constructor
// set up the object using the parameter x.
}
}
5.2.2 閲嶈澆鏋勯犳柟娉?
濡傛灉鏈変竴涓被甯︽湁鍑犱釜鏋勯犳柟娉曪紝閭d箞涔熻浼氭兂澶嶅埗鍏朵腑涓涓瀯閫犳柟娉曠殑鏌愪簺鎿嶄綔鍒板彟涓涓瀯閫犳柟娉曚腑銆傚彲浠ラ氳繃浣跨敤鍏抽敭瀛梩his浣滀負涓涓柟娉曡皟鐢ㄦ潵杈懼埌榪欎釜鐩殑銆備笉鑳介氳繃鏂規硶鍚嶇洿鎺ヨ皟鐢ㄦ瀯閫犳柟娉曘?
public class Employee {
private String name;
private int salary;
public Employee(String n, int s) {
name = n;
salary = s;
}
public Employee(String n) {
this(n, 0);
}
public Employee() {
this( " Unknown " );
}
}
鍦ㄧ浜屼釜鏋勯犳柟娉曚腑錛屾湁涓涓瓧絎︿覆鍙傛暟錛岃皟鐢╰his(n,0)灝嗘帶鍒舵潈浼犻掑埌鏋勯犳柟娉曠殑鍙︿竴涓増鏈紝鍗抽噰鐢ㄤ簡涓涓猄tring鍙傛暟鍜屼竴涓猧nt鍙傛暟鐨勬瀯閫犳柟娉曘?
鍦ㄧ涓変釜鏋勯犳柟娉曚腑錛屽畠娌℃湁鍙傛暟錛岃皟鐢╰his("Unknownn")灝嗘帶鍒舵潈浼犻掑埌鏋勯犳柟娉曠殑鍙︿竴涓増鏈紝鍗抽噰鐢ㄤ簡涓涓猄tring鍙傛暟鐨勬瀯閫犳柟娉曘?
瀵逛簬this鐨勪換浣曡皟鐢紝濡傛灉鍑虹幇鍦ㄤ換浣曟瀯閫犳柟娉曚腑錛屽繀欏諱綔涓虹涓涓鍙ャ?
5.2.3 緙虹渷鏋勯犳柟娉?
緙虹渷鏋勯犳柟娉曟槸娌℃湁鍙傛暟鐨勬瀯閫犳柟娉曪紝浣犲彲浠ユ樉寮忓畾涔夌被鐨勭己鐪佹瀯閫犳柟娉曘?
涓轟簡淇濊瘉姣忎釜綾昏嚦灝戞湁涓涓瀯閫犳柟娉曪紝濡傛灉瀹氫箟鐨勭被涓竴涓瀯閫犳柟娉曚篃娌℃湁鍐欙紝Java灝嗚嚜鍔ㄦ彁渚涗竴涓己鐪佹瀯閫犳柟娉曘傝鏋勯犳柟娉曟病鏈夊弬鏁幫紝鐢╬ublic 淇グ錛岃屼笖鏂規硶浣撲負絀恒傛牸寮忓涓嬶細
public ClassName(){}
鍙綾諱腑鏄懼紡瀹氫箟浜嗕竴涓垨澶氫釜鏋勯犳柟娉曪紝鑰屼笖鎵鏈夋樉寮忓畾涔夌殑鏋勯犳柟娉曢兘甯﹀弬鏁幫紝閭d箞灝嗗け鍘葷己鐪佹瀯閫犳柟娉曘?
涓句緥濡備笅錛?
public class Sample1{}
public class Sample2
{
public Sample2(int a){System.out.println("My Constructor");}
}
public class Sample3
{
public Sample3(){System.out.println("My Default Constructor");}
}
鍙互璋冪敤Sample1鐨勭己鐪佹瀯閫犳柟娉曟潵鍒涘緩Sample1瀵硅薄銆?
Sample1 s=new Sample1();
Sample2綾葷殑緙虹渷鏋勯犳柟娉曞け鏁堬紝鍥犳浠ヤ笅鐨勫垱寤篠ample2瀵硅薄鐨勬柟娉曠紪璇戜細鍑洪敊銆?
Sample2 s=new Sample2();
姝g‘鐨勫垱寤烘柟娉曟槸錛?
Sample2 s=new Sample2(0);
Sample3綾誨畾涔変簡鑷繁鐨勭己鐪佹瀯閫犳柟娉曪紝鍥犳浠ヤ笅璇彞鏄悎娉曠殑銆?
Sample3 s=new Sample3();
5.2.4 瀛愮被璋冪敤鐖剁被鐨勬瀯閫犳柟娉?
鐖剁被鐨勬瀯閫犳柟娉曚笉鑳借瀛愮被緇ф壙銆傚瓙綾諱笉鑳界洿鎺ラ氳繃鏂規硶鍚嶈皟鐢ㄧ埗綾葷殑涓涓瀯閫犳柟娉曪紝鑰屾槸瑕侀氳繃super鍏抽敭瀛楄皟鐢ㄧ埗綾葷殑涓涓瀯閫犳柟娉曪紝super璇彞蹇呴』浣嶄簬瀛愮被鏋勯犳柟娉曠殑絎竴琛屻?
渚嬪錛?
/**
* Son.java
*/
class GrandPa
{
protected GrandPa()
{
System.out.println("default GrandPa");
}
public GrandPa(String name)
{
System.out.println(name);
}
}
class Father extends GrandPa
{
protected Father()
{
System.out.println("default Father");
}
public Father(String grandPaName,String fatherName)
{
super(grandPaName);
System.out.println(fatherName);
}
}
public class Son extends Father
{
public Son()
{
System.out.println("default Son");
}
public Son(String grandPaName,String fatherName,String sonName)
{
super(grandPaName,fatherName);
System.out.println(sonName);
}
public static void main(String args[])
{
Son s1=new Son();
Son s2= new Son("My GrandPa", "My Father", "My Son");
}
}
鎵ц璇彞錛?
Son s2=new Son("My GrandPa", "My Father", "My Son");
灝嗕細杈撳嚭濡備笅緇撴灉錛?
My GrandPa
My Father
My Son
褰撳瓙綾葷殑鏌愪釜鏋勯犳柟娉曟病鏈夎皟鐢ㄧ埗綾葷殑涓涓瀯閫犳柟娉曪紝閫氳繃榪欎釜鏋勯犳柟娉曞垱寤哄瓙綾誨璞℃椂錛屼細鑷姩鍏堣皟鐢ㄧ埗綾葷殑緙虹渷鏋勯犳柟娉曘傚浜庡綰х戶鎵匡紝鎵ц緙虹渷鏋勯犳柟娉曠殑欏哄簭鏄粠鏈涓婂眰鐨勭被寮濮嬨?
瀵逛簬浠ヤ笂鐨勪唬鐮佹墽琛岃鍙on s1=new Son();
灝嗕細杈撳嚭濡備笅緇撴灉錛?
default GrandPa
default Father
default Son
褰撳瓙綾葷殑鏌愪釜鏋勯犳柟娉曟病鏈夎皟鐢ㄧ埗綾葷殑涓涓瀯閫犳柟娉曪紝鑰岀埗綾誨張娌℃湁鎻愪緵緙虹渷鏋勯犳柟娉曟椂錛屽皢浼氬嚭鐜扮紪璇戦敊璇?
渚嬪錛氫慨鏀逛竴涓婼on.java鏂囦歡銆傚幓鎺塆randPa綾諱腑鏄懼紡瀹氫箟鐨勭己鐪佹瀯閫犳柟娉曪細
protected GrandPa()
{
System.out.println("default GrandPa");
}
榪欐牱錛孏randPa綾諱腑灝卞け鍘諱簡緙虹渷鏋勯犳柟娉曪紝榪欐椂錛屽湪緙栬瘧Father綾葷殑緙虹渷鏋勯犳柟娉曟椂錛屽洜涓烘壘涓嶅埌GrandPa綾葷殑緙虹渷鏋勯犳柟娉曡屽嚭閿欍?
瀛愮被鐨勬煇涓瀯閫犳柟娉曟病鏈夐氳繃super璇彞璋冪敤鐖剁被鐨勬瀯閫犳柟娉曪紝鑰屾槸閫氳繃this璇彞璋冪敤浜嗗彟涓涓瀯閫犳柟娉曪紝鑰屽湪鍙︿竴涓瀯閫犳柟娉曚腑閫氳繃super璇彞璋冪敤浜嗙埗綾葷殑鏋勯犳柟娉曪紝榪欑鎯呭喌涓嬶紝鐖剁被鐨勭己鐪佹瀯閫犳柟娉曚笉浼氳璋冪敤銆?
渚嬪錛?
class A
{
A(int i){}
}
class B extends A
{
B(){this(0);}
B(int i){super(i);}
}
瀵逛簬new B()璇彞灝嗕緷嬈℃墽琛屽涓嬫柟娉曪細
1錛欰(int) 2錛欱(int) 3錛欱()
5.2.5 鏋勯犳柟娉曠殑浣滅敤鍩?
鏋勯犳柟娉曞彧鑳借鎵鍦ㄧ被鐨勫叾浠栨瀯閫犳柟娉曟垨瀛愮被鐨勬瀯閫犳柟娉曡皟鐢紝鎴栧湪鐢╪ew璇彞鍒涘緩綾葷殑瀹炰緥鏃惰璋冪敤銆傚紩鐢ㄧ被鍨嬬殑鍙橀噺涓嶈兘璁塊棶瀵硅薄鐨勬瀯閫犳柟娉曘?
瀵逛簬浠ヤ笅浠g爜錛岃璇昏呰嚜宸卞垎鏋愭煇浜涜鍙ョ紪璇戝嚭閿欑殑鍘熷洜銆?
class Base
{
public Base(int i,int j){}
public Base(int i){
this(i,0); //CORRECT
Base(i,0); //ERROR
}
}
class Sub extends Base
{
public Sub(int i,int j)
{
super(i,0); //CORRECT
}
void method1(int i,int j)
{
this(i,j); //ERROR
Sub(i,j); //ERROR
}
void method2(int i,int j)
{
super(i,j); //ERROR
}
void method3(int i,int j)
{
Base s錛漬ew Base(0,0); //CORRECT
s.Base(0,0); //ERROR
}
}
5.2.6 鏋勯犳柟娉曚笉鑳借緇ф壙
鏋勯犳柟娉曞彲浠ヨ瀛愮被鐨勬瀯閫犳柟娉曡皟鐢紝浣嗕笉鑳借瀛愮被緇ф壙銆?
渚嬪錛?
class A
{
A(int i){};
A(){}
}
class B extends A{}
class C extends B
{
C(){
super.super(0); //COMPILE ERROR
A(0); //COMPILE ERROR
}
}
鐢變簬綾籅騫舵病鏈夌戶鎵跨被A鐨勬瀯閫犳柟娉旳(int i)錛屾墍浠ュ湪鏋勯犳柟娉旵()涓皟鐢ㄧ被A鐨勬瀯閫犳柟娉曟槸闈炴硶鐨勩?
5.2.7 鑰冨療瑕佺偣
l 璇嗗埆鍚堟硶鐨勬瀯閫犳柟娉曪紱
2 鏋勯犳柟娉曞彲浠ヨ閲嶈澆錛屼竴涓瀯閫犳柟娉曞彲浠ラ氳繃this鍏抽敭瀛楄皟鐢ㄥ彟涓涓瀯閫犳柟娉曪紝this璇彞蹇呴』浣嶄簬鏋勯犳柟娉曠殑絎竴琛岋紱
3 褰撲竴涓被涓病鏈夊畾涔変換浣曟瀯閫犳柟娉曪紝Java灝嗚嚜鍔ㄦ彁渚涗竴涓己鐪佹瀯閫犳柟娉曪紱
4 瀛愮被閫氳繃super鍏抽敭瀛楄皟鐢ㄧ埗綾葷殑涓涓瀯閫犳柟娉曪紱
5 褰撳瓙綾葷殑鏌愪釜鏋勯犳柟娉曟病鏈夐氳繃super鍏抽敭瀛楄皟鐢ㄧ埗綾葷殑鏋勯犳柟娉曪紝閫氳繃榪欎釜鏋勯犳柟娉曞垱寤哄瓙綾誨璞℃椂錛屼細鑷姩鍏堣皟鐢ㄧ埗綾葷殑緙虹渷鏋勯犳柟娉?
6 鏋勯犳柟娉曚笉鑳借static銆乫inal銆乻ynchronized銆乤bstract銆乶ative淇グ錛屼絾鍙互琚玴ublic銆乸rivate銆乸rotected淇グ錛?
7 鏋勯犳柟娉曚笉鏄被鐨勬垚鍛樻柟娉曪紱
8 鏋勯犳柟娉曚笉鑳借緇ф壙銆?
5.2.8 璇曢瑙f瀽
1錛嶹hich line contains a constructor in this class definition?
public class Counter { // (a)
int current, step;
public Counter(int startValue, int stepValue) { // (b)
set(startValue);
setStepValue(stepValue);
}
public int get() { return current; } // (c)
public void set(int value) { current = value; } // (d)
public void setStepValue(int stepValue) { step = stepValue; } // (e)
}
a) Code marked with (a) is a constructor
b) Code marked with (b) is a constructor
c) Code marked with (c) is a constructor
d) Code marked with (d) is a constructor
e) Code marked with (e) is a Constructor
絳旀錛歜
瑙f瀽錛氱被鐨勬瀯閫犳柟娉曞繀欏婚伒寰互涓嬭鍒欙細鏂規硶鍚嶅拰綾誨悓鍚嶏紝鏃犺繑鍥炲箋備竴涓柟娉曞悓鏃舵弧瓚寵繖涓や釜鏉′歡錛孞ava緙栬瘧鍣ㄥ氨浼氬皢鍏跺綋浣滅被鐨勬瀯閫犳柟娉曘備竴涓柟娉曞鏋滃彧婊¤凍鍏朵腑鐨勪竴涓潯浠訛紝灝嗕細緙栬瘧鍑洪敊錛岃璁や負鏄笉鍚堟硶鐨勬柟娉曞0鏄庛?
2錛嶹hich of the following can be applied to constructors:
a) final
b) static
c) synchronized
d) native
e) None of these.
絳旀錛歟
瑙f瀽錛氭瀯閫犳柟娉曚笉鑳借瀛愮被緇ф壙錛屾墍浠ョ敤final淇グ娌℃湁鎰忎箟銆傛瀯閫犳柟娉曠敤浜庡垱寤轟竴涓柊鐨勫璞★紝涓嶈兘浣滀負綾葷殑闈欐佹柟娉曪紝鎵浠ョ敤static淇グ娌℃湁鎰忎箟銆傛澶栵紝Java璇█涓嶆敮鎸乶ative鎴杝ynchronized鐨勬瀯閫犳柟娉曘?
3錛嶹hat will happen when you attempt to compile and run the following code .
public class Hope{
public static void main(String argv[]){
Hope h = new Hope();
}
protected Hope(){
for(int i =0; i <10; i ++){
System.out.println(i);
}
}
}
a) Compilation error: Constructors cannot be declared protected
b) Run time error: Constructors cannot be declared protected
c) Compilation and running with output 0 to 10
d) Compilation and running with output 0 to 9
絳旀錛歞
瑙f瀽錛氭瀯閫犳柟娉曞彲浠ヨpublic銆乸rotected銆乸rivate淇グ銆?
4錛嶹hat will happen if you try to compile and execute B´s main() method?
class A {
int i;
A(int i) {
this.i = i * 2;
}
}
class B extends A {
public static void main(String[] args) {
B b = new B(2);
}
B(int i) {
System.out.println(i);
}
}
Select the one right answer.
a) The instance variable i is set to 4
b) The instance variable i is set to 2
c) The instance variable i is set to 0
d) This code will not compile
絳旀錛歞
瑙f瀽錛氱敱浜庣被B鐨勬瀯閫犳柟娉旴(int i)涓病鏈夎皟鐢ㄧ埗綾葷殑鏋勯犳柟娉曪紝鑰岀埗綾諱腑鍙堟病鏈夌己鐪佹瀯閫犳柟娉曪紝瀵艱嚧緙栬瘧閿欒銆?
5錛嶹hat happens when you try to compile and run the following program?
class Mystery {
String s;
public static void main(String[] args) {
Mystery m = new Mystery();
m.go();
}
void Mystery() {
s = "constructor";
}
void go() {
System.out.println(s);
}
}
Select the one right answer.
a) this code will not compile
b) this code compiles but throws an exception at runtime
c) this code runs but nothing appears in the standard output
d) this code runs and "constructor" in the standard output
e) this code runs and writes "null" in the standard output
絳旀錛歟
瑙f瀽錛氳繖閬撻涓晠鎰忚緗簡涓涓櫡闃憋紝瀹氫箟浜嗕竴涓矊浼兼瀯閫犳柟娉曠殑Mystery()鏂規硶銆傜敱浜庡畠琚0鏄庝簡榪斿洖綾誨瀷錛屾墍浠ュ叾瀹炰笉鏄瀯閫犳柟娉曘俷ew Mystery()璇彞鍏跺疄璋冪敤鐨勬槸綾籑ystery鐨勭己鐪佹瀯閫犳柟娉曘?
6錛嶻es or No?
Statement1) If you create a non-default derived constructor and don´t call the base class constructor 錛宼he compiler will call the default base class constructor automatically. (Assume that the default constructor is defined for the base class).
Statement2) What about if it is not defined?
Statement3) What about the case of a default derived constructor, does the compiler
call the default base class constructor
a) Yes ,No,Yes
b) Yes,No,No
絳旀錛歛
瑙f瀽錛氬瓙綾葷殑鏋勯犳柟娉曚腑濡傛灉娌℃湁璋冪敤鐖剁被鐨勬瀯閫犳柟娉曪紝紼嬪簭榪愯鏃朵細鑷姩鍏堣皟鐢ㄧ埗綾葷殑緙虹渷鏋勯犳柟娉曪紙鍖呮嫭鑷姩鎻愪緵鐨勭己鐪佹瀯閫犳柟娉曟垨鏄懼紡瀹氫箟鐨勭己鐪佹瀯閫犳柟娉曪級銆傚鏋滅埗綾繪病鏈夌己鐪佹瀯閫犳柟娉曪紝灝嗕細緙栬瘧鍑洪敊銆?
7錛嶨iven the following code how could you invoke the Base constructor that will print out the string "base constructor";
class Base{
Base(int i){
System.out.println("base constructor");
}
Base(){
}
}
public class Sup extends Base{
public static void main(String argv[]){
Sup s= new Sup();
//One
}
Sup()
{
//Two
}
public void derived()
{
//Three
}
}
a) On the line After //One put Base(10);
b) On the line After //One put super(10);
c) On the line After //Two put super(10);
d) On the line After //Three put super(10);
絳旀錛歝
瑙f瀽錛氭瀯閫犳柟娉曞彧鑳借鎵鍦ㄧ被鐨勫叾浠栨瀯閫犳柟娉曟垨瀛愮被鐨勬瀯閫犳柟娉曡皟鐢ㄣ傛墍浠ュ湪//one銆?/three澶勮皟鐢ㄦ瀯閫犳柟娉曢兘鏄潪娉曠殑銆?
8錛嶵rue or False.
The Class class has no public constructor.
a) True
b) False
絳旀錛歛
瑙f瀽錛欳lass綾繪病鏈夊叕鍏辨瀯閫犳柟娉曪紝鎵浠lass綾葷殑瀵硅薄涓嶈兘鍦ㄧ▼搴忎腑閫氳繃鏋勯犳柟娉曞垱寤恒傚綋Java铏氭嫙鏈鴻杞芥煇涓被錛堝亣濡傜被鍚嶆槸ClassSample錛夌殑鏃跺欙紝浼氳嚜鍔ㄨ皟鐢↗VM鐨勭被瑁呰澆鍣ㄧ殑defineClass()鏂規硶錛岃繖涓柟娉曚細鍒涘緩鍜屾煇涓被ClassSample鐩稿叧鐨凜lass綾葷殑瀵硅薄銆侽bject綾繪湁涓柟娉昰etClass()錛屽畠榪斿洖涓涓狢lass綾葷殑瀵硅薄銆傛墍浠ワ紝鎵鏈夌殑Java瀵硅薄閮藉彲浠ラ氳繃鏂規硶getClass()鑾峰緱瀹冪殑Class綾葷殑瀵硅薄銆備緥濡傦細
ClassSample s錛漬ew ClassSample();
System.out.println(s.getClass().getName());
灝嗕細鎵撳嵃ClassSample銆?
9錛嶹hich statements concerning the following code are true?
class A {
public A() {}
public A(int i) { this(); }
}
class B extends A {
public boolean B(String msg) { return false; }
}
class C extends B {
private C() { super(); }
public C(String msg) { this(); }
public C(int i) {}
}
a) The code will fail to compile.
b) The constructor in A that takes an int as an argument will never be called as a result of constructing an object of class B or C.
c) Class C has three constructors.
d) Objects of class B cannot be constructed.
e) At most one of the constructors of each class is called as a result of constructing an object of class C.
絳旀錛歜錛宑
瑙f瀽錛氬湪綾籅涓畾涔夌殑鏂規硶B()鏈夎繑鍥炲鹼紝鎵浠ュ畠涓嶆槸鏋勯犳柟娉曘傜被B鍙湁涓涓己鐪佹瀯閫犳柟娉曪紝鎵浠ュ垱寤虹被B鎴栫被C鐨勫璞℃椂錛屼細鍏堣皟鐢ㄧ被B鐨勭己鐪佹瀯閫犳柟娉曪紝鑰岀被B鐨勭己鐪佹瀯閫犳柟娉曚細鍏堣皟鐢ㄧ被C鐨勭己鐪佹瀯閫犳柟娉曪紝綾籄鐨勬瀯閫犳柟娉旳(int i)姘歌繙涓嶄細琚皟鐢ㄣ傞夐」e鏄笉姝g‘鐨勶紝new C("hello")璇彞灝嗚皟鐢ㄧ被C鐨勪袱涓瀯閫犳柟娉旵()鍜孋(String msg)銆?
10錛嶹hich of the following code fragments are legal?
a) class MusicWork {
MusicWork(String s) {
System.out.println("The name of this work is" + s);
}
}
class ClassicalWork extends MusicWork {
ClassicalWork(String s, String composer) {
System.out.println("The composer is " + composer);
}
}
b) class MusicWork {
MusicWork(String s) {
System.out.println("The name of this work is" + s);
}
}
class ClassicalWork extends MusicWork {
ClassicalWork(String s, String composer) {
super(s);
System.out.println("The composer is " + composer);
}
}
c) class MusicWork {
MusicWork(String s) {
System.out.println("The name of this work is" + s);
}
}
class ClassicalWork extends MusicWork {
ClassicalWork(String s, String composer) {
System.out.println("This is a work of classical music");
System.out.println("The composer is " + composer);
super(s);
}
}
d) class MusicWork {
MusicWork() {
System.out.println("This is a work of music");
}
MusicWork(String name) {
this();
System.out.println("The name of this work is" + name);
}
}
e) class MusicWork {
MusicWork() {
System.out.println("This is a work of music");
}
MusicWork(String name) {
this();
System.out.println("The name of this work is" + name);
}
MusicWork(String composer) {
this();
System.out.println("The composer of this work is" + composer);
}
}
f) class MusicWork {
MusicWork() {
System.out.println("This is a work of music");
}
MusicWork(String name) {
System.out.println("The name of this work is" + name);
this();
}
}
絳旀錛歜錛宒
瑙f瀽錛氶夐」a涓繀欏諱負鐖剁被鎻愪緵緙虹渷鏋勯犳柟娉曘傞夐」c涓病鏈夋妸super璇彞鏀懼湪鏋勯犳柟娉曠殑絎竴琛屻傞夐」e涓湁涓や釜Music(String)鏋勯犳柟娉曪紝涓嶅悎娉曘傞夐」f涓病鏈夋妸this璇彞鏀懼湪鏋勯犳柟娉曠殑絎竴琛屻?
11錛嶨iven the following class definition which of the following can be legally placed after the comment line//Here ?
class Base{
public Base(int i){}
}
public class MyOver extends Base{
public static void main(String arg[]){
MyOver m = new MyOver(10);
}
MyOver(int i){
super(i);
}
MyOver(String s, int i){
this(i);
//Here
}
}
a) MyOver m = new MyOver();
b) super();
c) this("Hello",10);
d) Base b = new Base(10);
絳旀錛歞
瑙f瀽錛氱被MyOver娌℃湁緙虹渷鏋勯犳柟娉曪紝鎵浠ラ夐」a涓嶆紜?/p>
浠庝笂涓鑺傚彲浠ョ湅鍑猴紝鍦ㄥ鏁版儏鍐典笅錛屽垵濮嬪寲涓涓璞$殑鏈緇堟楠ゆ槸鍘昏皟鐢ㄨ繖涓璞$殑鏋勯犳柟娉曘傛瀯閫犳柟娉曡礋璐e璞$殑鍒濆鍖栧伐浣滐紝涓哄疄渚嬪彉閲忚祴浜堝悎閫傜殑鍒濆鍊箋傛瀯閫犳柟娉曞繀欏繪弧瓚充互涓嬭娉曡鍒欙細
(1) 鏂規硶鍚嶅繀欏諱笌綾誨悕鐩稿悓銆?br />
(2)涓嶈澹版槑榪斿洖綾誨瀷銆?br />
(3)涓嶈兘琚玸tatic銆乫inal銆乻ynchronized銆乤bstract鍜宯ative淇グ銆傛瀯閫犳柟娉曚笉鑳借瀛愮被緇ф壙錛屾墍浠ョ敤final鍜?/p>
abstract淇グ娌℃湁鎰忎箟銆傛瀯閫犳柟娉曠敤浜庡垵濮嬪寲涓涓柊寤虹殑瀵硅薄錛屾墍浠ョ敤static淇グ娌℃湁鎰忎箟銆傚涓嚎紼嬩笉浼氬悓鏃跺垱寤哄唴瀛樺湴鍧鐩稿悓鐨勫悓涓涓璞★紝鍥犳鐢╯ynchronized淇グ娌℃湁蹇呰銆傛澶栵紝Java璇█涓嶆敮鎸乶ative綾誨瀷鐨勬瀯閫犳柟娉曘?br />
鍦ㄤ互涓婼ample綾諱腑錛屽叿鏈塱nt榪斿洖綾誨瀷鐨凷ample(int x)鏂規硶鍙槸涓櫘閫氱殑瀹炰緥鏂規硶錛屼笉鑳戒綔涓烘瀯閫犳柟娉曪細
public class Sample {
private int x;
public Sample() { // 涓嶅甫鍙傛暟鐨勬瀯閫犳柟娉?br />
this(1);
}
public Sample(int x) { //甯﹀弬鏁扮殑鏋勯犳柟娉?br />
this.x=x;
}
public int Sample(int x) { //涓嶆槸鏋勯犳柟娉?br />
return x++;
}
}
浠ヤ笂渚嬪瓙灝界鑳界紪璇戦氳繃錛屼絾鏄妸瀹炰緥鏂規硶鍜屾瀯閫犳柟娉曞悓鍚嶏紝涓嶆槸濂界殑緙栫▼涔犳儻錛屽鏄撳紩璧鋒販娣嗐備緥濡備互涓婱ystery綾葷殑Mystery()鏂規硶鏈塿oid榪斿洖綾誨瀷錛屽洜姝ゆ槸鏅氱殑瀹炰緥鏂規硶錛?br />
public class Mystery {
private String s;
public void Mystery() { //涓嶆槸鏋勯犳柟娉?br />
s = "constructor";
}
void go() {
System.out.println(s);
}
public static void main(String[] args) {
Mystery m = new Mystery();
m.go();
}
}
浠ヤ笂紼嬪簭鐨勬墦鍗扮粨鏋滀負null銆傚洜涓虹敤new璇彞鍒涘緩Mystery瀹炰緥鏃訛紝璋冪敤鐨勬槸Mystery綾葷殑榛樿鏋勯犳柟娉曪紝鑰屼笉鏄互涓婃湁void榪斿洖綾誨瀷鐨凪ystery()鏂規硶銆傚叧浜庨粯璁ゆ瀯閫犳柟娉曠殑姒傚康錛屽弬瑙佹湰绔犵11.2.2鑺傦紙榛樿鏋勯犳柟娉曪級銆?br />
11.2.1 閲嶈澆鏋勯犳柟娉?/strong>
褰撻氳繃new璇彞鍒涘緩涓涓璞℃椂錛屽湪涓嶅悓鐨勬潯浠朵笅錛屽璞″彲鑳戒細鏈変笉鍚岀殑鍒濆鍖栬涓恒備緥濡傚浜庡叕鍙告柊榪涙潵鐨勪竴涓泧鍛橈紝鍦ㄤ竴寮濮嬬殑鏃跺欙紝鏈夊彲鑳戒粬鐨勫鍚嶅拰騫撮緞鏄湭鐭ョ殑錛屼篃鏈夊彲鑳戒粎浠呬粬鐨勫鍚嶆槸宸茬煡鐨勶紝涔熸湁鍙兘濮撳悕鍜屽勾榫勯兘鏄凡鐭ョ殑銆傚鏋滃鍚嶆槸鏈煡鐨勶紝灝辨殏涓旀妸濮撳悕璁句負"鏃犲悕姘?錛屽鏋滃勾榫勬槸鏈煡鐨勶紝灝辨殏涓旀妸騫撮緞璁句負-1銆?br /> 鍙氳繃閲嶈澆鏋勯犳柟娉曟潵琛ㄨ揪瀵硅薄鐨勫縐嶅垵濮嬪寲琛屼負銆備互涓嬩緥紼?1-2鐨凟mployee綾葷殑鏋勯犳柟娉曟湁涓夌閲嶈澆褰㈠紡銆傚湪涓涓被鐨勫涓瀯閫犳柟娉曚腑錛屽彲鑳戒細鍑虹幇涓浜涢噸澶嶆搷浣溿備負浜嗘彁楂樹唬鐮佺殑鍙噸鐢ㄦэ紝Java璇█鍏佽鍦ㄤ竴涓瀯閫犳柟娉曚腑錛岀敤this璇彞鏉ヨ皟鐢ㄥ彟涓涓瀯閫犳柟娉曘?br />
渚嬬▼11-2 Employee.java
public class Employee {
private String name;
private int age;
/** 褰撻泧鍛樼殑濮撳悕鍜屽勾榫勯兘宸茬煡錛屽氨璋冪敤姝ゆ瀯閫犳柟娉?*/
public Employee(String name, int age) {
this.name = name;
this.age=age;
}
/** 褰撻泧鍛樼殑濮撳悕宸茬煡鑰屽勾榫勬湭鐭ワ紝灝辮皟鐢ㄦ鏋勯犳柟娉?*/
public Employee(String name) {
this(name, -1);
}
/** 褰撻泧鍛樼殑濮撳悕鍜屽勾榫勯兘鏈煡錛屽氨璋冪敤姝ゆ瀯閫犳柟娉?*/
public Employee() {
this( "鏃犲悕姘? );
}
public void setName(String name){this.name=name; }
public String getName(){return name; }
public void setAge(int age){this.age=age;}
public int getAge(){return age;}
}
浠ヤ笅紼嬪簭鍒嗗埆閫氳繃涓変釜鏋勯犳柟娉曞垱寤轟簡涓変釜Employee瀵硅薄錛?br />
Employee zhangsan=new Employee("寮犱笁",25);
Employee lisi=new Employee("鏉庡洓");
Employee someone=new Employee();
鍦‥mployee(String name)鏋勯犳柟娉曚腑錛宼his(name,-1)璇彞鐢ㄤ簬璋冪敤Employee(String name,int age)鏋勯犳柟娉曘傚湪Employee()鏋勯犳柟娉曚腑錛宼his("鏃犲悕姘?)璇彞鐢ㄤ簬璋冪敤Employee(String name)鏋勯犳柟娉曘?br />
鐢╰his璇彞鏉ヨ皟鐢ㄥ叾浠栨瀯閫犳柟娉曟椂錛屽繀欏婚伒瀹堜互涓嬭娉曡鍒欙細
錛?錛夊亣濡傚湪涓涓瀯閫犳柟娉曚腑浣跨敤浜唗his璇彞錛岄偅涔堝畠蹇呴』浣滀負鏋勯犳柟娉曠殑絎竴鏉¤鍙ワ紙涓嶈冭檻娉ㄩ噴璇彞錛夈備互涓嬫瀯閫犳柟娉曟槸闈炴硶鐨勶細
public Employee(){
String name="鏃犲悕姘?;
this(name); //緙栬瘧閿欒錛宼his璇彞蹇呴』浣滀負絎竴鏉¤鍙?br />
}
錛?錛夊彧鑳藉湪涓涓瀯閫犳柟娉曚腑鐢╰his璇彞鏉ヨ皟鐢ㄧ被鐨勫叾浠栨瀯閫犳柟娉曪紝鑰屼笉鑳藉湪瀹炰緥鏂規硶涓敤this璇彞鏉ヨ皟鐢ㄧ被鐨勫叾浠栨瀯閫犳柟娉曘?br />
錛?錛夊彧鑳界敤this璇彞鏉ヨ皟鐢ㄥ叾浠栨瀯閫犳柟娉曪紝鑰屼笉鑳介氳繃鏂規硶鍚嶆潵鐩存帴璋冪敤鏋勯犳柟娉曘備互涓嬪鏋勯犳柟娉曠殑璋冪敤鏂瑰紡鏄潪娉曠殑錛?br />
public Employee() {
String name= "鏃犲悕姘?;
Employee(name); //緙栬瘧閿欒錛屼笉鑳介氳繃鏂規硶鍚嶆潵鐩存帴璋冪敤鏋勯犳柟娉?br />
}
11.2.2 榛樿鏋勯犳柟娉?/strong>
榛樿鏋勯犳柟娉曟槸娌℃湁鍙傛暟鐨勬瀯閫犳柟娉曪紝鍙垎涓轟袱縐嶏細錛?錛夐殣鍚殑榛樿鏋勯犳柟娉曪紙2錛夌▼搴忔樉寮忓畾涔夌殑榛樿鏋勯犳柟娉曘?br />
鍦↗ava璇█涓紝姣忎釜綾昏嚦灝戞湁涓涓瀯閫犳柟娉曘備負浜嗕繚璇佽繖涓鐐癸紝濡傛灉鐢ㄦ埛瀹氫箟鐨勭被涓病鏈夋彁渚涗換浣曟瀯閫犳柟娉曪紝閭d箞Java璇█灝嗚嚜鍔ㄦ彁渚涗竴涓殣鍚殑榛樿鏋勯犳柟娉曘傝鏋勯犳柟娉曟病鏈夊弬鏁幫紝鐢╬ublic 淇グ錛岃屼笖鏂規硶浣撲負絀猴紝鏍煎紡濡備笅錛?br />
public ClassName(){} //闅愬惈鐨勯粯璁ゆ瀯閫犳柟娉?br />
鍦ㄧ▼搴忎腑涔熷彲浠ユ樉寮忕殑瀹氫箟榛樿鏋勯犳柟娉曪紝瀹冨彲浠ユ槸浠繪剰鐨勮闂駭鍒備緥濡傦細
protected Employee() { //紼嬪簭鏄懼紡瀹氫箟鐨勯粯璁ゆ瀯閫犳柟娉?br />
this("鏃犲悕姘?);
}
濡傛灉綾諱腑鏄懼紡瀹氫箟浜嗕竴涓垨澶氫釜鏋勯犳柟娉曪紝騫朵笖鎵鏈夌殑鏋勯犳柟娉曢兘甯﹀弬鏁幫紝閭d箞榪欎釜綾誨氨澶卞幓浜嗛粯璁ゆ瀯閫犳柟娉曘傚湪浠ヤ笅紼嬪簭涓紝Sample1綾繪湁涓涓殣鍚殑榛樿鏋勯犳柟娉曪紝Sample2綾繪病鏈夐粯璁ゆ瀯閫犳柟娉曪紝Sample3綾繪湁涓涓樉寮忓畾涔夌殑榛樿鏋勯犳柟娉曪細
public class Sample1{}
public class Sample2{
public Sample2(int a){System.out.println("My Constructor");}
}
public class Sample3{
public Sample3(){System.out.println("My Default Constructor");}
}
鍙互璋冪敤Sample1綾葷殑榛樿鏋勯犳柟娉曟潵鍒涘緩Sample1瀵硅薄錛?br />
Sample1 s=new Sample1(); //鍚堟硶
Sample2綾繪病鏈夐粯璁ゆ瀯閫犳柟娉曪紝鍥犳浠ヤ笅璇彞浼氬鑷寸紪璇戦敊璇細
Sample2 s=new Sample2(); //緙栬瘧鍑洪敊
Sample3綾繪樉寮忓畾涔変簡榛樿鏋勯犳柟娉曪紝鍥犳浠ヤ笅璇彞鏄悎娉曠殑銆?br />
Sample3 s=new Sample3();
11.2.3 瀛愮被璋冪敤鐖剁被鐨勬瀯閫犳柟娉?/strong>
鐖剁被鐨勬瀯閫犳柟娉曚笉鑳借瀛愮被緇ф壙銆備互涓婱yException綾葷戶鎵夸簡java.lang.Exception綾伙細
public class MyException extends Exception{} // MyException綾誨彧鏈変竴涓殣鍚殑榛樿鏋勯犳柟娉?br />
灝界鍦‥xception綾諱腑瀹氫箟浜嗗涓嬪艦寮忕殑鏋勯犳柟娉曪細
public Exception(String msg)
浣哅yException綾諱笉浼氱戶鎵夸互涓奅xception綾葷殑鏋勯犳柟娉曪紝鍥犳浠ヤ笅浠g爜鏄笉鍚堟硶鐨勶細
//緙栬瘧鍑洪敊錛孧yException綾諱笉瀛樺湪榪欐牱鐨勬瀯閫犳柟娉?br />
Exception e=new MyException("Something is error");
鍦ㄥ瓙綾葷殑鏋勯犳柟娉曚腑錛屽彲浠ラ氳繃super璇彞璋冪敤鐖剁被鐨勬瀯閫犳柟娉曘備緥濡傦細
public class MyException extends Exception{
public MyException(){
//璋冪敤Exception鐖剁被鐨凟xception(String msg)鏋勯犳柟娉?br />
super("Something is error");
}
public MyException(String msg){
//璋冪敤Exception鐖剁被鐨凟xception(String msg)鏋勯犳柟娉?br />
super(msg);
}
}
鐢╯uper璇彞鏉ヨ皟鐢ㄧ埗綾葷殑鏋勯犳柟娉曟椂錛屽繀欏婚伒瀹堜互涓嬭娉曡鍒欍?br />
錛?錛夊湪瀛愮被鐨勬瀯閫犳柟娉曚腑錛屼笉鑳界洿鎺ラ氳繃鐖剁被鏂規硶鍚嶈皟鐢ㄧ埗綾葷殑鏋勯犳柟娉曪紝鑰屾槸瑕佷嬌鐢╯uper璇彞錛屼互涓嬩唬鐮佹槸闈炴硶鐨勶細
public MyException(String msg){
Exception(msg); //緙栬瘧閿欒
}
錛?錛夊亣濡傚湪瀛愮被鐨勬瀯閫犳柟娉曚腑鏈塻uper璇彞錛屽畠蹇呴』浣滀負鏋勯犳柟娉曠殑絎竴鏉¤鍙ワ紝浠ヤ笅浠g爜鏄潪娉曠殑錛?/p>
public MyException(){
String msg= "Something wrong";
super(msg); //緙栬瘧閿欒錛宻uper璇彞蹇呴』浣滀負鏋勯犳柟娉曠殑絎竴鏉¤鍙?br />
}
鍦ㄥ垱寤哄瓙綾葷殑瀵硅薄鏃訛紝Java铏氭嫙鏈洪鍏堟墽琛岀埗綾葷殑鏋勯犳柟娉曪紝鐒跺悗鍐嶆墽琛屽瓙綾葷殑鏋勯犳柟娉曘傚湪澶氱駭緇ф壙鐨勬儏鍐典笅錛屽皢浠庣戶鎵挎爲鐨勬渶涓婂眰鐨勭埗綾誨紑濮嬶紝渚濇鎵ц鍚勪釜綾葷殑鏋勯犳柟娉曪紝榪欏彲浠ヤ繚璇佸瓙綾誨璞′粠鎵鏈夌洿鎺ユ垨闂存帴鐖剁被涓戶鎵跨殑瀹炰緥鍙橀噺閮借姝g‘鐨勫垵濮嬪寲銆備緥濡備互涓婤ase鐖剁被鍜孲ub瀛愮被鍒嗗埆鏈変竴涓疄渚嬪彉閲?a鍜宐錛屽綋鏋勯燬ub瀹炰緥鏃訛紝榪欎袱涓疄渚嬪彉閲忛兘浼氳鍒濆鍖栥?br />
public class Base{
private int a;
public Base(int a){ this.a=a;}
public int getA(){return a;}
}
public class Sub extends Base{
private int b;
public Base(int a,int b){super(a); this.b=b;}
public int getB(){return b;}
public static void main(String args[]){
Sub sub=new Sub(1,2);
System.out.println("a="+sub.getA()+" b="+sub.getB()); //鎵撳嵃a=1 b=2
}
}
鍦ㄤ互涓嬩緥紼?1-3錛圫on.java錛変腑錛孲on綾葷戶鎵縁ather綾伙紝Father綾葷戶鎵縂randpa綾匯傝繖涓変釜綾婚兘鏄懼紡瀹氫箟浜嗛粯璁ょ殑鏋勯犳柟娉曪紝姝ゅ榪樺畾涔変簡涓涓甫鍙傛暟鐨勬瀯閫犳柟娉曘?/p>
渚嬬▼11-3 Son.java
class Grandpa{
protected Grandpa(){
System.out.println("default Grandpa");
}
public Grandpa(String name){
System.out.println(name);
}
}
class Father extends Grandpa{
protected Father(){
System.out.println("default Father");
}
public Father(String grandpaName,String fatherName){
super(grandpaName);
System.out.println(fatherName);
}
}
public class Son extends Father{
public Son(){
System.out.println("default Son");
}
public Son(String grandpaName,String fatherName,String sonName){
super(grandpaName,fatherName);
System.out.println(sonName);
}
public static void main(String args[]){
Son s1= new Son("My Grandpa", "My Father", "My Son"); //鈶?br />
Son s2=new Son(); //鈶?br />
}
}
鎵ц浠ヤ笂main()鏂規硶鐨勭鈶犳潯璇彞錛屾墦鍗扮粨鏋滃涓嬶細
My Grandpa
My Father
My Son
姝ゆ椂鏋勯犳柟娉曠殑鎵ц欏哄簭濡傚浘11-1鎵紺恒?/p>
鍥?1-1 璋冪敤Son綾葷殑甯﹀弬鏁扮殑鏋勯犳柟娉曟椂鎵鏈夋瀯閫犳柟娉曠殑鎵ц欏哄簭
褰撳瓙綾葷殑鏋勯犳柟娉曟病鏈夌敤super璇彞鏄懼紡璋冪敤鐖剁被鐨勬瀯閫犳柟娉曪紝閭d箞閫氳繃榪欎釜鏋勯犳柟娉曞垱寤哄瓙綾誨璞℃椂錛孞ava铏氭嫙鏈轟細鑷姩鍏堣皟鐢ㄧ埗綾葷殑榛樿鏋勯犳柟娉曘傛墽琛屼互涓奡on綾葷殑main()鏂規硶鐨勭鈶℃潯璇彞錛屾墦鍗扮粨鏋滃涓嬶細
default Grandpa
default Father
default Son
姝ゆ椂鏋勯犳柟娉曠殑鎵ц欏哄簭濡傚浘11-2鎵紺恒?/p>
鍥?1-2 璋冪敤Son綾葷殑榛樿鏋勯犳柟娉曟椂鎵鏈夋瀯閫犳柟娉曠殑鎵ц欏哄簭
褰撳瓙綾葷殑鏋勯犳柟娉曟病鏈夌敤super璇彞鏄懼紡璋冪敤鐖剁被鐨勬瀯閫犳柟娉曪紝鑰岀埗綾誨張娌℃湁鎻愪緵榛樿鏋勯犳柟娉曟椂錛屽皢浼氬嚭鐜扮紪璇戦敊璇備緥濡傛妸渚嬬▼11-3鍋氶傚綋淇敼錛屽垹闄randpa綾諱腑鏄懼紡瀹氫箟鐨勯粯璁ゆ瀯閫犳柟娉曪細
// protected Grandpa(){
// System.out.println("default GrandPa");
// }
榪欐牱錛孏randpa綾誨氨澶卞幓浜嗛粯璁ゆ瀯閫犳柟娉曪紝榪欐椂錛屽湪緙栬瘧Father綾葷殑榛樿鏋勯犳柟娉曟椂錛屽洜涓烘壘涓嶅埌Grandpa綾葷殑榛樿鏋勯犳柟娉曡岀紪璇戝嚭閿欍傚鏋滄妸Grandpa綾葷殑榛樿鏋勯犳柟娉曠殑protected璁塊棶綰у埆鏀逛負private璁塊棶綰у埆錛屼篃浼氬鑷寸紪璇戦敊璇紝鍥犱負Father綾葷殑榛樿鏋勯犳柟娉曟棤娉曡闂瓽randpa綾葷殑縐佹湁榛樿鏋勯犳柟娉曘?br /> 鍦ㄤ互涓嬩緥瀛愪腑錛屽瓙綾籗ub鐨勯粯璁ゆ瀯閫犳柟娉曟病鏈夐氳繃super璇彞璋冪敤鐖剁被鐨勬瀯閫犳柟娉曪紝鑰屾槸閫氳繃this璇彞璋冪敤浜嗚嚜韜殑鍙︿竴涓瀯閫犳柟娉昐ub(int i)錛岃屽湪Sub(int i)涓氳繃super璇彞璋冪敤浜嗙埗綾籅ase鐨凚ase(int i)鏋勯犳柟娉曘傝繖鏍鳳紝鏃犺閫氳繃Sub綾葷殑鍝釜鏋勯犳柟娉曟潵鍒涘緩Sub瀹炰緥錛岄兘浼氬厛璋冪敤鐖剁被Base鐨凚ase(int i)鏋勯犳柟娉曘?br />
class Base{
Base(int i){System.out.println("call Base(int i)");}
}
public class Sub extends Base{
Sub(){this(0); System.out.println("call Sub()");}
Sub(int i){super(i); System.out.println("call Sub(int i)");}
public static void main(String args[]){
Sub sub=new Sub();
}
}
鎵ц浠ヤ笂Sub綾葷殑main()鏂規硶鐨刵ew Sub()璇彞錛屾墦鍗扮粨鏋滃涓嬶細
call Base(int i)
call Sub(int i)
call Sub()
姝ゆ椂鏋勯犳柟娉曠殑鎵ц欏哄簭濡傚浘11-3鎵紺恒?br />
鍥?1-3 璋冪敤Sub綾葷殑榛樿鏋勯犳柟娉曟椂鎵鏈夋瀯閫犳柟娉曠殑鎵ц欏哄簭
鍦ㄤ笅闈㈢殑渚嬪瓙涓紝Base綾諱腑娌℃湁瀹氫箟浠諱綍鏋勯犳柟娉曪紝瀹冨疄闄呬笂鏈変竴涓殣鍚殑榛樿鏋勯犳柟娉曪細
Base(){}
Sub綾葷殑Sub(int i)鏋勯犳柟娉曟病鏈夌敤super璇彞鏄懼紡璋冪敤鐖剁被鐨勬瀯閫犳柟娉曪紝鍥犳褰撳垱寤篠ub瀹炰緥鏃訛紝浼氬厛璋冪敤Base鐖剁被鐨勯殣鍚粯璁ゆ瀯閫犳柟娉曘?
class Base{} //鍏鋒湁闅愬惈榛樿鏋勯犳柟娉?br />
public class Sub extends Base{
Sub(int i){System.out.println(i);}
public static void main(String args[]){
System.out.println(new Sub(1)); //鎵撳嵃1
}
}
11.2.4 鏋勯犳柟娉曠殑浣滅敤鍩?/strong>
鏋勯犳柟娉曞彧鑳介氳繃浠ヤ笅鏂瑰紡琚皟鐢細
(1) 褰撳墠綾葷殑鍏朵粬鏋勯犳柟娉曢氳繃this璇彞璋冪敤瀹冦?br />
(2) 褰撳墠綾葷殑瀛愮被鐨勬瀯閫犳柟娉曢氳繃super璇彞璋冪敤瀹冦?br />
(3)鍦ㄧ▼搴忎腑閫氳繃new璇彞璋冪敤瀹冦?br />
瀵逛簬渚嬬▼11-4錛圫ub.java錛夌殑浠g爜錛岃璇昏呰嚜宸卞垎鏋愭煇浜涜鍙ョ紪璇戝嚭閿欑殑鍘熷洜銆?br />
渚嬬▼11-4 Sub.java
class Base{
public Base(int i,int j){}
public Base(int i){
this(i,0); //鍚堟硶
Base(i,0); //緙栬瘧鍑洪敊
}
}
class Sub extends Base{
public Sub(int i,int j){
super(i,0); //鍚堟硶
}
void method1(int i,int j){
this(i,j); //緙栬瘧鍑洪敊
Sub(i,j); //緙栬瘧鍑洪敊
}
void method2(int i,int j){
super(i,j); //緙栬瘧鍑洪敊
}
void method3(int i,int j){
Base s=new Base(0,0); //鍚堟硶
s.Base(0,0); //緙栬瘧鍑洪敊
}
}
11.2.5 鏋勯犳柟娉曠殑璁塊棶綰у埆
鏋勯犳柟娉曞彲浠ュ浜巔ublic銆乸rotected銆侀粯璁ゅ拰private榪欏洓縐嶈闂駭鍒箣涓銆傛湰鑺傜潃閲嶄粙緇嶆瀯閫犳柟娉曞浜巔rivate綰у埆鐨勬剰涔夈?br />
褰撴瀯閫犳柟娉曚負private綰у埆錛屾剰鍛崇潃鍙兘鍦ㄥ綋鍓嶇被涓闂畠錛氬湪褰撳墠綾葷殑鍏朵粬鏋勯犳柟娉曚腑鍙互閫氳繃this璇彞璋冪敤瀹冿紝姝ゅ榪樺彲浠ュ湪褰撳墠綾葷殑鎴愬憳鏂規硶涓氳繃new璇彞璋冪敤瀹冦?br />
鍦ㄤ互涓嬪満鍚堜箣涓錛屽彲浠ユ妸綾葷殑鎵鏈夋瀯閫犳柟娉曢兘澹版槑涓簆rivate綾誨瀷銆?br />
錛?錛夊湪榪欎釜綾諱腑浠呬粎鍖呭惈浜嗕竴浜涗緵鍏朵粬紼嬪簭璋冪敤鐨勯潤鎬佹柟娉曪紝娌℃湁浠諱綍瀹炰緥鏂規硶銆傚叾浠栫▼搴忔棤闇鍒涘緩璇ョ被鐨勫疄渚嬶紝灝辮兘璁塊棶綾葷殑闈欐佹柟娉曘備緥濡?java.lang.Math綾誨氨絎﹀悎榪欑鎯呭喌錛屽湪Math綾諱腑鎻愪緵浜嗕竴緋誨垪鐢ㄤ簬鏁板榪愮畻鐨勫叕鍏遍潤鎬佹柟娉曪紝涓轟簡紱佹澶栭儴紼嬪簭鍒涘緩Math綾葷殑瀹炰緥錛?Math綾葷殑鎯熶竴鐨勬瀯閫犳柟娉曟槸private綾誨瀷鐨勶細
private Math(){}
鍦ㄧ7绔犵殑7.2鑺傦紙abstract淇グ絎︼級鎻愬埌榪囷紝abstract綾誨瀷鐨勭被涔熶笉鍏佽瀹炰緥鍖栥備篃璁鎬綘浼氶棶錛屾妸Math綾誨畾涔変負濡備笅abstract綾誨瀷錛屼笉鏄篃鑳界姝ath綾昏瀹炰緥鍖栧悧錛?br />
public abstract class Math{…}
濡傛灉涓涓被鏄娊璞$被錛屾剰鍛崇潃瀹冩槸涓撻棬鐢ㄤ簬琚戶鎵跨殑綾伙紝鍙互鎷ユ湁瀛愮被錛岃屼笖鍙互鍒涘緩鍏蜂綋瀛愮被鐨勫疄渚嬨傝孞DK騫朵笉甯屾湜鐢ㄦ埛鍒涘緩Math綾葷殑瀛愮被錛屽湪榪欑鎯呭喌涓嬶紝鎶婄被鐨勬瀯閫犳柟娉曞畾涔変負private綾誨瀷鏇村悎閫傘?br />
錛?錛夌姝㈣繖涓被琚戶鎵褲傚綋涓涓被鐨勬墍鏈夋瀯閫犳柟娉曢兘鏄痯rivate綾誨瀷錛屽亣濡傚畾涔変簡瀹冪殑瀛愮被錛岄偅涔堝瓙綾葷殑鏋勯犳柟娉曟棤娉曡皟鐢ㄧ埗綾葷殑浠諱綍鏋勯犳柟娉曪紝鍥犳浼氬鑷寸紪璇戦敊璇傚湪絎?绔犵殑7.3.1鑺傦紙final綾伙級鎻愬埌榪囷紝鎶婁竴涓被澹版槑涓篺inal綾誨瀷錛屼篃鑳界姝㈣繖涓被琚戶鎵褲傝繖涓よ呯殑鍖哄埆鏄細
1)濡傛灉涓涓被鍏佽鍏朵粬紼嬪簭鐢╪ew璇彞鏋勯犲畠鐨勫疄渚嬶紝浣嗕笉鍏佽鎷ユ湁瀛愮被錛岄偅灝辨妸綾誨0鏄庝負final綾誨瀷銆?br />
2)濡傛灉涓涓被鏃笉鍏佽鍏朵粬紼嬪簭鐢╪ew璇彞鏋勯犲畠鐨勫疄渚嬶紝鍙堜笉鍏佽鎷ユ湁瀛愮被錛岄偅灝辨妸綾葷殑鎵鏈夋瀯閫犳柟娉曞0鏄庝負private綾誨瀷銆?/p>
鐢變簬澶у鏁扮被閮藉厑璁稿叾浠栫▼搴忕敤new璇彞鏋勯犲畠鐨勫疄渚嬶紝鍥犳鐢╢inal淇グ絎︽潵紱佹綾昏緇ф壙鐨勫仛娉曟洿甯歌銆?br />
錛?錛夎繖涓被闇瑕佹妸鏋勯犺嚜韜疄渚嬬殑緇嗚妭灝佽璧鋒潵錛屼笉鍏佽鍏朵粬紼嬪簭閫氳繃new璇彞鍒涘緩榪欎釜綾葷殑瀹炰緥錛岃繖涓被鍚戝叾浠栫▼搴忔彁渚涗簡鑾峰緱鑷韓瀹炰緥鐨勯潤鎬佹柟娉曪紝榪欑鏂規硶縐頒負闈欐佸伐鍘傛柟娉曪紝鏈珷絎?1.3鑺傦紙闈欐佸伐鍘傛柟娉曪級瀵規浣滀簡榪涗竴姝ョ殑浠嬬粛銆?/p>