導航:首頁 > 編程語言 > java私有內部類實例化

java私有內部類實例化

發布時間:2023-08-20 11:10:53

java中 介面不是不能實例化嗎,為什麼匿名內部類中用new實例化了呢,比如下面代碼

new ActionListener() 是創建一個繼承自ActionListener的匿名類對象,通過new表達式返回的專引用自動向上轉型為對ActionListener的引用。因為屬匿名類本身無名,也就不存在構造方法,需要顯式調用父類的構造方法,並重寫父類的方法。

② Java知多少(36)內部類及其實例化

在 Java 中,允許在一個類(或方法、語句塊)的內部定義另一個類,稱為內部類(Inner Class),有時也稱為嵌套類(Nested Class)。

內部類和外層封裝它的類之間存在邏輯上的所屬關系,一般只用在定義它的類或語句塊之內,實現一些沒有通用意義的功能邏輯,在外部引用它時必須給出完整的名稱。

使用內部類的主要原因有:
內部類可以訪問外部類中的數據,包括私有的數據。
內部類可以對同一個包中的其他類隱藏起來。
當想要定義一個回調函數且不想編寫大量代碼時,使用匿名(anonymous)內部類比較便捷。
減少類的命名沖突。

請看下面的例子:

1 public class Outer {
2 private int size;
3 public class Inner {
4 private int counter = 10;
5 public void doStuff() {
6 size++;
7 }
8 }
9 public static void main(String args[]) {
10 Outer outer = new Outer();
11 Inner inner = outer.new Inner();
12 inner.doStuff();
13 System.out.println(outer.size);
14 System.out.println(inner.counter);
15 // 編譯錯誤,外部類不能訪問內部類的變數
16 System.out.println(counter);
17 }
18 }

這段代碼定義了一個外部類 Outer,它包含了一個內部類 Inner。將錯誤語句注釋掉,編譯,會生成兩個 .class 文件:Outer.class 和 Outer$Inner.class。也就是說,內部類會被編譯成獨立的位元組碼文件。

內部類是一種編譯器現象,與虛擬機無關。編譯器將會把內部類翻譯成用 $ 符號分隔外部類名與內部類名的常規類文件,而虛擬機則對此一無所知。

注意:必須先有外部類的對象才能生成內部類的對象,因為內部類需要訪問外部類中的成員變數,成員變數必須實例化才有意義。

內部類是 Java 1.1 的新增特性,有些程序員認為這是一個值得稱贊的進步,但是內部類的語法很復雜,嚴重破壞了良好的代碼結構, 違背了Java要比C++更加簡單的設計理念。

內部類看似增加了—些優美有趣,實屬沒必要的特性,這是不是也讓Java開始走上了許多語言飽受折磨的毀滅性道路呢?本教程並不打算就這個問題給予一個肯定的答案。

③ 如何在外部實例化私有靜態內部類

class T1 {
class T2 {
public T2() {
System.out.println("T2");
}
}
static class T3 {
public T3() {
System.out.println("T3");
}
}
private static class T4 {
public T4() {
System.out.println("T4");
}
}
public static void main(String args[]) {
//實例專化內部類T4,
//因為屬內部類T4是private的,所以不可被其他類訪問,自然不能在其他類中new出來
T4 t4 = new T1.T4();
}
}
public class A {
public static void main(String args[]) {
//實例化內部類T2
T1 t1 = new T1();
T1.T2 t2 = t1.new T2();
//實例化內部類T3
T1.T3 t3 = new T1.T3();
}
}

④ java 內部類實例化的一些疑惑

你好:

  1. 首先private Node root 當你抄沒有顯示初始化襲的時候它的值是Null.

  2. 他不報空指針異常的原因是在public void addNode(String str) 這個方法中,你有一個判斷
    if(root==null)
    {root=n;}

    這樣的話會給它賦一個初始值,它不在是null了,所以程序可以不報錯的執行

希望可以幫到你

⑤ java類中定義的類怎麼 實例化

子對象可來以使用父類的除了private的所有源方法,父類不能使用子類的方法。
就好象,兒子知道父親乾的詳細信息(比如娶了多少老婆,賺了多少錢),但是父親不能知道他這一生會生多少兒子,兒子長大以後會娶多少老婆,會賺多少錢一樣。
a b
= new
b();
b想訪問b類的方法,可以通過強制類型轉換
((b)b).setcolor();

⑥ java 內部類實例化路徑的概念問題

要知道內部類的特點,內部類可以訪問包裝他的外部類的所有,方法和屬性,包括私有方法,但是哪怕對同一個包下面其他類來說,內部類是隱藏的,也就是說,如果要訪問內部類,就必須先要得到他的外部包裝類,得到那個句柄之後在new 內部類,就可以調用他的方法了,你這個屬於方法內部類,即,外部類的方法裡面定義了內部類,方法內部類有個規定就是內部類的實例化是在方法裡面定義的,這個必須, class Outer {
public void doSomething(){
final int a =10;
class Inner{
public void seeOuter(){
System.out.println(a);
}
}
Inner in = new Inner();
in.seeOuter();
}
public static void main(String[] args) {
Outer out = new Outer();
out.doSomething();
}
}
我想你應該看懂了吧,總之你要知道,想調用內部類,就必須先實例化外部類,不然是訪問不了內部類的,另外內部類在java應用中不是特別常見,不過還是很重要的,他是解決java只支持單繼承所帶來的瑕疵,內部類很好的解決了。

⑦ 如何實例化Java內部類

怎麼會報錯呢?

下面這2種都可版以:權

Peopleone=newPeople();

People.Hobbyhobby=one.newHobby();

Hobbybby=one.newHobby();
閱讀全文

與java私有內部類實例化相關的資料

熱點內容
驅動程序順序安裝腳本 瀏覽:665
word文件里怎樣查重 瀏覽:219
mx5系統基帶版本 瀏覽:184
ntlea全域通win10 瀏覽:171
qq怎麼查看別人的收藏 瀏覽:135
地震三參數matlab程序 瀏覽:57
怎樣給優盤文件加密軟體 瀏覽:7
收拾文件有哪些小妙招 瀏覽:431
pdf文件去底網 瀏覽:253
win10重裝系統需要格式化c盤嗎 瀏覽:424
路由器trx文件 瀏覽:655
淘寶店鋪數據包怎麼做 瀏覽:195
win10鍵盤黏連 瀏覽:332
json如何生成表格 瀏覽:323
怎麼修復sql資料庫表 瀏覽:40
微信微博差別 瀏覽:163
簽到積分換禮品app 瀏覽:812
mfc最近打開文件 瀏覽:672
app埋點平台都有哪些app 瀏覽:314
瑞斯康達網路管理界面 瀏覽:254

友情鏈接