javaSE-面向对象-匿名内部类

来源:互联网 发布:淘宝企业开店需要 编辑:程序博客网 时间:2024/05/21 23:08

匿名内部类

l就是内部类的简化写法。
l前提:
内部类可以继承或实现一个外部类或者接口。
l格式为:
new外部类名或者接口名(){覆盖类或者接口中的代码,(也可以自定义内容。)}
l简单理解:
就是建立一个带内容的外部类或者接口的子类匿名对象。
package  com.test3;/*匿名内部类的形式。其实就是对内部类进行简化书写。必须有前提:内部类必须继承或者实现类或接口。格式:new 父类名或者接口名(){定义内部类的内容;}匿名内部类其实就是一个子类匿名对象。*/abstract class AbsDemo{abstract void function();}class Outer{int num = 4;/*class Inner extends AbsDemo{void function(){System.out.println("num="+num);}}*/void method(){//new Inner().function();new AbsDemo()//创建了内部类的对象。{//对内部类的描述。void function(){System.out.println("num===="+num);}}.function();}}class NoNameInnerDemo {public static void main(String[] args) {Outer out = new Outer();out.method();}}

package com.test4;abstract class AbsDemo{abstract void function();abstract void show();}class Outer{int num = 4;/*class Inner extends AbsDemo{void function(){}void show(){}}*/void method(){//Inner in = new Inner();//in.function();//in.show();AbsDemo a = new AbsDemo(){void function(){}void show(){}};a.function();a.show();}void method2(){Object obj = new Object()//父类引用指向了子类对象。子类对象被向上转型了。{void show2(){System.out.println("show2 run");}void show3(){System.out.println("show3 run");}};//obj.show2();//失败的。因为Object中没有定义show2方法。}}class NoNameInnerDemo2 {public static void main(String[] args) {//Outer out = new Outer();//out.method2();Outer2.show().method();/*Outer2.show(): Outer2类中有一个show方法。而且这个方法是被静态修饰的。Outer2.show().method();调用完show方法后的运算结果是一个对象,一个可以调用method方法的对象。这个对象类型一定是Inter类型。*/}}class Outer2{//补足内部代码。用匿名内部来完成。static Inter show(){return new Inter(){public void method(){}};}}interface Inter{public void method();}


0 0