匿名内部类:
1、匿名内部类其实就是内部类的简写格式。
2、定义匿名内部类的前提:
内部类必须是继承一个类或实现接口。
3、匿名内部类的格式:
new 父类或接口(){定义子类的内容}
4、其实匿名内部类就是一个匿名子类对象。可以把它理解带内容的对象。
5、匿名内部类中定义的方法最好不要超过三个。
未用匿名内部类之前:
运行结果为:public class Demo { public static void main(String[] args) { Outer3 outer=new Outer3(); outer.function(); } } abstract class AbsDemo{ abstract void show(); } class Outer3{ int x=3; class Inner3 extends AbsDemo{ void method(){ System.out.println("method:"+x); } void show(){ System.out.println("show:"+x); } } public void function(){ new Inner3().method(); new Inner3().show(); } }
method:3
show:3
使用匿名内部类:
public class Demo { public static void main(String[] args) { Outer3 outer=new Outer3(); outer.function(); } } abstract class AbsDemo{ abstract void show(); } class Outer3{ int x=3; // class Inner3 extends AbsDemo{ // void method(){ // System.out.println("method:"+x); // } // void show(){ // System.out.println("show:"+x); // } // } public void function(){ // new Inner3().method(); // new Inner3().show(); //new Inner3().show();就等价于下面的部分 /*匿名内部类的格式: new 父类或接口(){定义子类的内容}*/ new AbsDemo() { //这就是上面注释部分的简化形式 void show() { System.out.println("x="+x); } }.show(); } }
运行结果为:x=3
内部类的一个实例:
public class Demo51 { public static void main(String[] args){ //Test.function():Test类中有一个静态的方法function。 //.method() :function这个方法运算后的结果是一个对象,而且是一个Inter类型的对象。 //因为只有是Inter类型的对象,才可以调用method方法。 Test1.function().method(); } } interface Inter1{ void method(); } class Test1{ /* static class Inner implements Inter{ public void method() { System.out.println("method run"); } } */ static Inter1 function(){ return new Inter1() { public void method() { System.out.println("method run"); } }.method(); } }