国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

Java中的構造方法分析

2012-04-29 18:05張紅霞
電腦知識與技術 2012年26期
關鍵詞:面向對象程序設計構造方法繼承

張紅霞

摘要:構造方法是Java語言中一個基本且重要的知識點。正確和熟練地使用構造方法,對掌握Java和面向對象編程非常重要。文章介紹了構造方法的概念和作用、對構造方法的調用和繼承性進行了詳細分析,并簡單介紹了構造方法的訪問權限。

關鍵詞:面向對象程序設計;Java;構造方法;繼承

中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2012)26-6276-03

Analysis about Constructor in Java

ZHANG Hong-xia

(Department of Computer Science, GuangXi University of Finance & Economics, Nanning 530003, China)

Abstract: Constructor is a basic and important knowledge point in Java programming. Using constructor correctly and expertly is very important for mastering Java and Object-Oriented Programming. The article describes the concept and function of con? structor, analyses the calling and inheritance of constructor in detail, and simply introduces the access level of constructor.

Key words: Object-Oriented Programming; Java; constructor; inheritance

Java是一種純面向對象的編程語言。面向對象的一個重要特征就是對相同類型的事物進行分析抽象后形成類,類定義好后,將用于創(chuàng)建實例對象,程序的執(zhí)行則表現(xiàn)為對象之間的交互通信。在Java和C++等面向對象的編程語言中,創(chuàng)建對象是由構造方法來完成的,因此,構造方法是非常重要的內容。由于各方面原因,目前國內的很多Java教材在對構造方法的介紹方面并不夠全面和詳細,不利于初學者的學習和理解,本文對構造方法的一些最基本的知識方面進行了分析。

1構造方法的概念和作用

類的構造方法是方法名和類名完全相同,而且沒有返回值的一種特殊的方法。在Java中創(chuàng)建對象時,編譯器會自動調用相應的構造方法,為新建的對象分配存儲空間和對其中的成員變量進行初始化??梢钥闯觯瑯嬙旆椒ǖ淖饔檬谴_保程序中的每個對象都得到初始化,另外,構造方法有助于減少錯誤,并使代碼更容易閱讀。

構造方法的名字必須和類名相同,是由于以下原因:第一,除類名外,采用其它任何名字都可能與類中的某個成員名稱沖突;第二,構造方法是由編譯器自動調用的,所以必須讓編譯器知道應該調用哪個方法,采用和類名相同的方法名自然最簡單并且更符合邏輯。

構造方法沒有返回值,這和返回值為空(void)是明顯不同的。構造方法也不能被繼承。因此,構造方法又不是方法,在很多資料中構造方法又被稱為構造器(Constructor)。

2構造方法的定義和調用

由于構造方法的重要性,Java中的每個類都會有一個或多個構造方法。即使類的設計者沒有為類提供構造方法,編譯器也會自動提供一個默認的無參的構造方法,它的方法體為空,當用這個類創(chuàng)建對象時,編譯器會自動調用該默認的構造方法。但要注意的是:一旦為類定義了構造方法,編譯器就不再提供默認的無參的構造方法。如:

public class Circle{

float radius ;

Circle(float r){

radius=r; }//在Circle類中顯示定義了一個帶參數(shù)的構造方法

…}

public class CircleTest{

public static void main(String[] args){

Circle c1=new Circle();//出錯

Circle c2=new Clrcle(5.5f);//正確,調用類中提供的帶參的構造方法

…}}

以上程序中在“Circle c1=new Circle();”處會出現(xiàn)編譯錯誤,這是因為類中已經(jīng)定義了一個帶參的構造方法,此時編譯器就不再提供默認的無參構造方法了,自然也不能再去調用這個方法了。如果希望在以上程序中能繼續(xù)使用無參的構造方法,可以在類中增加一個無參的構造方法定義,如:

public class Circle{

float radius;

Circle( ){ }//在Circle類中定義一個無參的構造方法

Circle(float r){

radius=r; }//在Circle類中定義了一個帶參的構造方法

…}

public class CircleTest{

public static void main(String[] args){

Circle c1=new Circle();//正確,調用類中無參的構造方法

Circle c2=new Clrcle(5.5f);//正確,調用類中帶1個參數(shù)的構造方法

…}}

由上面的程序可以看出,構造方法可以重載,即在一個類中可以定義多個構造方法。同一個類中的多個構造方法之間還可以通過this關鍵字互相調用。但需要注意:在一個構造方法中只能調用一次其它的構造方法,并且這個調用語句必須是該構造方法的第一條語句。如:

class Circle{

float radius, area;

Circle( ){//無參構造方法

System.out.println("This constructor has not parameter.");}

Circle(float r){//帶參的構造方法

this();//通過this調用無參構造方法,該語句必須位于方法中的第一行

System.out.println("This constructor has a parameter,its "+r);

radius=r; }

}

public class CircleTest{

public static void main(String[] args){ Circle c1=new Circle(8.5f);

}}

該程序的運行結果如下:

This constructor has not parameter.

This constructor has a parameter,its 8.5

3構造方法的繼承性

Java中的構造方法不能被繼承。但是當子類創(chuàng)建對象時,首先會自動調用其父類中的構造方法。所以雖然構造方法不能被繼承,但父類中的構造方法卻和子類對象的創(chuàng)建卻息息相關。現(xiàn)討論如下:

如果子類的構造方法中沒有用super關鍵字顯式調用父類的構造方法,則子類的構造方法會自動調用父類中的無參構造方法,如:

class base{ }//父類base

class derived extends base{//子類derived

public static void main(String[] args){

derived d=new derived();

}

}

上述程序中父類和子類的構造方法都是系統(tǒng)默認的無參構造方法,在創(chuàng)建子類對象時,首先自動調用父類中默認的無參構造方法,然后再調用子類中的默認構造方法。為了能看出這種自動調用,我們?yōu)楦割惡土祟惗硷@式加上一個無參的構造方法,程序如下:

class base{

base( )//父類中顯式提供了無參的構造方法

{ System.out.println("base constructor"); }

}

class derived extends base{

derived( )//子類的構造方法中會自動調用父類中的無參構造方法

{ System.out.println("derived constructor"); }

public static void main(String[] args){

derived d=new derived();}

}

程序執(zhí)行后輸出結果如下:

base constructor

derived constructor

由以上程序執(zhí)行結果可以看出構造方法的調用過程。將上面的程序修改一下,讓父類中的構造方法帶參數(shù),修改后的程序如下:

class base{

base(int i)//注意:父類中的構造方法帶了參數(shù)

{ System.out.println("base constructor"); }

}

class derived extends base{

derived()//注意:程序編譯時這里會出錯

{System.out.println("derived constructor"); }

public static void main(String[] args){

derived d=new derived();

}

}上述程序編譯時會出錯,這是因為父類中已經(jīng)定義了帶參的構造方法,編譯器就不再提供默認的構造方法,所以在創(chuàng)建子類對象時自動調用父類中的無參構造方法時會出錯。

要解決這個問題,有兩種方法:一是為父類增加一個無參的構造方法定義;二是在子類的構造方法中用super(參數(shù))顯式調用父類中的帶參數(shù)的構造方法,要注意的是:super(參數(shù))語句必須位于第一行,程序如下:

class base{

base(int i){ System.out.println("base constructor"); }

}

class derived extends base{

derived(){

super(8);//通過super調用父類中的構造方法,該語句必須位于第一行

System.out.println("derived constructor"); }

public static void main(String[] args){

derived d=new derived();

}

}

4構造方法的訪問權限

構造方法通常被聲名為public的,但實際上根據(jù)需要,構造方法的訪問權限聲明為protected、private和默認訪問級別都可以。比較特殊的是private級別的構造方法,它和單態(tài)模式有關,有興趣的讀者可以在這方面進一步深入學習。

5結束語

在Java中,構造方法是一個重要的基本知識,本文重點對構造方法的調用和繼承問題等方面進行了研究,但對于構造方法的訪問權限、外部類和內部類之間構造方法的調用等內容還需進行分析和研究。全面、正確和熟練地掌握構造方法,對掌握Java編程和面向對象編程非常重要。

參考文獻:

[1]焦曉藝.Java中的構造方法[J].山東輕工業(yè)學院學報,2004,18(2):11-15.

[2]耿祥義,張躍平.Java 2實用教程[M].北京:清華大學出版社,2010.

[3]張桂珠,張平,陳愛國.Java面向對象程序設計[M].北京:北京郵電大學出版社,2010.

[4] Eckel B. Java編程思想[M].陳昊鵬,譯.北京:機械工業(yè)出版社,2011.

[5]王麗麗,海麗.Java語言中的構造方法私有化[J].計算機光盤軟件與應用,2010(15):98-99.

猜你喜歡
面向對象程序設計構造方法繼承
DC-DC變換器分層級構造方法
《夢溪筆談》“甲子納音”構造方法的數(shù)學分析
基于MOOC的編譯原理分階段課程教學研究
幾乎最佳屏蔽二進序列偶構造方法
淺談杜審言、杜甫的祖孫關系:推崇、繼承、發(fā)展
淺論紫砂藝術的繼承與創(chuàng)新
論電影《暮光之城》的哥特文化
CDIO理念下《面向對象程序設計》教學改革研究
獨立學院面向對象程序設計教學模式的探討與實踐
氣象科技史研究領域又一重要學術成果