匿名(无名)内部类:
1.匿名内部类其实就是内部类的简写格式
2.匿名内部类前提:
内部类必须继承一个类或实现接口
3.匿名内部类格式:
new 父类或者接口(){定义子类的内容}
4.其实匿名内部类就是一个匿名子类对象
(带内容的对象)
5.匿名内部类中定义的方法最好<3个(超出3个代码将变得冗长)
- abstract class AbsDemo//抽象类
- {
- abstract void show();
- }
- class Outer
- {
- int x=5;
- /*
- ①
- class Inner extends AbsDemo
- {
- void show()
- {
- System.out.println("show:"+x);
-
- }
-
- }
- */
- public void function()
- {
- //② new Inner().show();
- //把① ②注释简写为:
-
- new AbsDemo()//匿名对象
- {
- void show()
- {
- System.out.println("x="+x);
- }
-
- }.show();
- //以上是一个对象,是AbsDemo子类的对象
-
- //通过匿名对象调用子类特有方法
- new AbsDemo()
- {
- void show()
- {
- System.out.println("x="+x);
- }
-
- void son()//子类特有方法
- {
- System.out.println("son");
- }
- }.son();
-
- //通过父类的引用来调用
- AbsDemo ab= new AbsDemo()//多态 父类引用指向子类对象
- {
- void show()
- {
- System.out.println("x="+x);
- }
- void son()
- {
- System.out.println("son");
- }
- };
- ab.show();
- //ab.son();//编译失败,父类中无son()
- //并且无法通过向下转型来调用son();
- } //因为子类没名字!
- }
- class AnonyInnerDemo
- {
- public static void main(String[] args)
- {
- new Outer().function();
- }
- }
复制代码
输出 :
x = 5
son
x = 5 |
|