內部類和匿名內部類
阿新 • • 發佈:2018-12-26
A.java
Test.java
Test.java
但使用匿名內部類還有個前提條件:必須繼承一個父類或實現一個介面;
為什麼需要內部類?
java內部類有什麼好處?為什麼需要內部類?
首先舉一個簡單的例子,如果你想實現一個介面,但是這個介面中的一個方法和你構想的這個類中的一個方法的名稱,引數相同,你應該怎麼辦?這時候,你 可以建一個內部類實現這個介面。由於內部類對外部類的所有內容都是可訪問的,所以這樣做可以完成所有你直接實現這個介面的功能。
不過你可能要質疑,更改一下方法的不就行了嗎?
的確,以此作為設計內部類的理由,實在沒有說服力。
真正的原因是這樣的,java中的內部類和介面加在一起,可以的解決常被C++程式設計師抱怨java中存在的一個問題——沒有多繼承。實際上,C++的多繼承設計起來很複雜,而java通過內部類加上介面,可以很好的實現多繼承的效果。
interface A
{
public void doSomething();
}
AImpl.java
class AImpl implements A
{
public void doSomething()
{
System.out.println("doSomething");
}
}
B.javaclass B
{
public void fun(A a)
{
System.out.println("B類的fun函式");
a.doSomething();
}
}
Test.java
class Test { public static void main(String[] args) { //AImpl al = new AImpl(); //A a = al; B b = new B(); //b.fun(a); b.fun(new A() { public void doSomething() { System.out.print("匿名內部類"); } }); } }
A.java
class A
{
int i;
class B
{
int j;
int funB()
{
int result = A.this.i + this.j;
return result;
}
}
}
Test.java
class Test { public static void main(String[] args) { A a = new A(); //A.B b = new A().new B(); A.B b = a.new B(); a.i = 3; b.j = 1; int result = b.funB(); System.out.println(result); } }
匿名內部類也就是沒有名字的內部類;
正因為沒有名字,所以匿名內部類只能使用一次,它通常用來簡化程式碼編寫;但使用匿名內部類還有個前提條件:必須繼承一個父類或實現一個介面;
為什麼需要內部類?
java內部類有什麼好處?為什麼需要內部類?
首先舉一個簡單的例子,如果你想實現一個介面,但是這個介面中的一個方法和你構想的這個類中的一個方法的名稱,引數相同,你應該怎麼辦?這時候,你 可以建一個內部類實現這個介面。由於內部類對外部類的所有內容都是可訪問的,所以這樣做可以完成所有你直接實現這個介面的功能。
不過你可能要質疑,更改一下方法的不就行了嗎?
的確,以此作為設計內部類的理由,實在沒有說服力。
真正的原因是這樣的,java中的內部類和介面加在一起,可以的解決常被C++程式設計師抱怨java中存在的一個問題——沒有多繼承。實際上,C++的多繼承設計起來很複雜,而java通過內部類加上介面,可以很好的實現多繼承的效果。