① 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 內部類實例化的一些疑惑
你好:
首先private Node root 當你抄沒有顯示初始化襲的時候它的值是Null.
他不報空指針異常的原因是在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();