匿名內部類
是內部類的簡化版格式
前提條件:
必須存在一個接口或者是一個類(可以是具體類,也可以是一個抽象類)中
書寫的格式:
new 接口名或者類名(){
方法重寫體;
}//相當於直接寫了一個具有重寫方法的匿名類
* 匿名內部類的實質:
繼承了該類(抽象類)或者是實現了該接口的子類對象!
以接口來說明
interface Inter{
//抽象功能
public abstract void show() ;
public abstract void show2() ;
}
//外部類
class Outer6{
//成員方法
public void method(){
//當接口中有一個方法的時候
// new Inter(){
//
// @Override
// public void show() {
// System.out.println("show");
// }
//
// }.show() ;
//當接口中有兩個方法的時候 下面的方法就比較繁瑣了
/*new Inter(){
@Override
public void show() {
System.out.println("show");
}
@Override
public void show2() {
System.out.println("show2");
}
}.show() ;
new Inter(){
@Override
public void show() {
System.out.println("show");
}
@Override
public void show2() {
System.out.println("show2");
}
}.show2();*/
//////////////////////////////////////////////////
//}這樣就可以用對象名可以調用重寫的方法
// Inter i2 = new Inter() ;
Inter i = new Inter(){
@Override
public void show() {
System.out.println("show");
}
@Override
public void show2() {
System.out.println("show2");
}
};//分號
//使用對象名調用
i.show();
i.show2() ;
}
}
//測試類
public class InnerDemo6 {
public static void main(String[] args) {
Outer6 o = new Outer6() ;
o.method() ;
}
}
說明:
1.匿名內部類是寫在局部位置的
2.外部類和內部類沒有繼承 實現關係
3.匿名內部類只是實現當前某一種功能去出現,所以不要和其他類想得那麼複雜
4.使用接口名 對象名 = new 接口名(){
//方法重寫();
}
匿名內部類 在實際開發的應用:在參數裏面充當內部類
interface Inter3{
public abstract void study() ;
}
class StudentDemo{
public void method(Inter3 i){//形式參數是一個接口
i.study() ;
}
}
//測試類
public class OuterTest {
public static void main(String[] args) {
//需求:調用StudentDemo中的method()方法
StudentDemo sd2 = new StudentDemo() ;
sd2.method(new Inter3(){
@Override
public void study() {
System.out.println("好好學習,天天向上...");
}
}) ;
}
}
說明:這裏參數充當了內部類,所以在調用method方法時候要重寫方法,使用匿名內部類,其實就是類似以前的調用,只不過使用內部類實現了方法罷了!