2015-11-10 74 views
-1

我對默認構造函數的實際可見性感到困惑。我一直在考慮的一本書,說明有創建一個默認的構造函數下面的代碼,但物理上不顯示一個(即員工()),儘管它是自動分配:Java中的默認構造函數可見性

public class Employee { 
private String name; 
private int zip; 
private int age; 
} 

在另一本書我告訴下面是一個默認的構造函數,因爲它不帶任何參數:

public class Pet { 
private String name; 
private int weight; 

Pet(){} 
} 

是後者的構造其實默認,如果我物理定義呢?還是默認的構造函數對我的代碼是不可見的,因爲與超類有關的東西?

編輯:我在詢問寫入類的物理代碼。一個消息來源告訴我,默認構造函數被明確寫出,另一個告訴我它不會出現在代碼中,並且基本上假定它存在,儘管它對用戶不明顯。我的問題是,明確的是來自java證書學習指南,所以它給我造成了一些困惑。

回答

-1

默認構造函數是一個公共無參構造函數。更具體地講它具有相同的訪問級別的類,所以publicpublic類,privateprivate類等

在第二個例子中,你正在創建一個包訪問級別的構造。

這意味着在同一個軟件包之外的任何人都可以看到和使用該類的實例(因爲它是公共類),但不能創建新類。

因爲您定義了一個構造函數,所以不會創建默認構造函數。

只是沒有參數不會使某些東西成爲默認構造函數。編譯器會自動添加一個默認構造函數,您根本沒有代碼。

1

如果您沒有在您的類中編寫任何構造函數,那麼Java編譯器會添加默認的無參數構造函數。 如果您在類中編寫任何構造函數,那麼Java編譯器不會向該類添加默認無參數構造函數。

請從下面的甲骨文網站是指相同的: https://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html

+0

但是OP在詢問隱式ctor的可見性。 –