Java構造器以及與方法的區別


功能不同:

  構造器是為了創建一個類的實例;命名與類相同;可以有任何訪問的修飾: public, protected, private或者沒有修飾,不能有以下非訪問性質的修飾: abstract, final, native, static, 或者 synchronized;無返回值。

  方法是為了實現類的一個動作。

以下為復制別人的博客內容:

 

"this"的用法
構造器和方法使用關鍵字this有很大的區別。方法引用this指向正在執行方法的類的實例。靜態方法不能使用this關鍵字,因為靜態方法不屬於類的實例,所以this也就沒有什么東西去指向。構造器的this指向同一個類中,不同參數列表的另外一個構造器,我們看看下面的代碼: 

public class Platypus { 

String name; 

Platypus(String input) { 
name = input; 


Platypus() { 
this("John/Mary Doe"); 


public static void main(String args[]) { 
Platypus p1 = new Platypus("digger"); 
Platypus p2 = new Platypus(); 



在上面的代碼中,有2個不同參數列表的構造器。第一個構造器,給類的成員name賦值,第二個構造器,調用第一個構造器,給成員變量name一個初始值 "John/Mary Doe". 

在構造器中,如果要使用關鍵字this,那么,必須放在第一行,如果不這樣,將導致一個編譯錯誤。 

"super"的用法 
構造器和方法,都用關鍵字super指向超類,但是用的方法不一樣。方法用這個關鍵字去執行被重載的超類中的方法。看下面的例子: 

class Mammal { 
void getBirthInfo() { 
System.out.println("born alive."); 



class Platypus extends Mammal { 
void getBirthInfo() { 
System.out.println("hatch from eggs"); 
System.out.print("a mammal normally is "); 
super.getBirthInfo(); 



在上面的例子中,使用super.getBirthInfo()去調用超類Mammal中被重載的方法。 

構造器使用super去調用超類中的構造器。而且這行代碼必須放在第一行,否則編譯將出錯。看下面的例子: 

public class SuperClassDemo { 
SuperClassDemo() {} 


class Child extends SuperClassDemo { 
Child() { 
super(); 



在上面這個沒有什么實際意義的例子中,構造器 Child()包含了 super,它的作用就是將超類中的構造器SuperClassDemo實例化,並加到 Child類中。 

編譯器自動加入代碼
編譯器自動加入代碼到構造器,對於這個,java程序員新手可能比較混淆。當我們寫一個沒有構造器的類,編譯的時候,編譯器會自動加上一個不帶參數的構造器,例如:public class Example {} 
編譯后將如下代碼: 

public class Example { 
Example() {} 



在構造器的第一行,沒有使用super,那么編譯器也會自動加上,例如: 

public class TestConstructors { 
TestConstructors() {} 


編譯器會加上代碼,如下: 

public class TestConstructors { 
TestConstructors() { 
super; 



仔細想一下,就知道下面的代碼 

public class Example {} 

經過會被編譯器加代碼形如: 

public class Example { 
Example() { 
super; 



繼承

構造器是不能被繼承的。子類可以繼承超類的任何方法。看看下面的代碼: 

public class Example { 
public void sayHi { 
system.out.println("Hi"); 


Example() {} 


public class SubClass extends Example { 


類 SubClass 自動繼承了父類中的sayHi方法,但是,父類中的構造器 Example()卻不能被繼承。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM