09.匿名内部类的概述和格式

匿名内部类

  • A:作用:匿名内部类是创建某个类型子类对象的快捷方式。
  • B:格式:
new 父类或接口(){
    //进行方法重写
};

代码演示

//已经存在的父类:
public abstract class Person{
    public abstract void eat();
}
//定义并创建该父类的子类对象,并用多态的方式赋值给父类引用变量
Person  p = new Person(){
    public void eat() {
        System.out.println(“我吃了”);
}
};
//调用eat方法
p.eat();

使用匿名对象的方式,将定义子类与创建子类对象两个步骤由一个格式一次完成,。虽然是两个步骤,但是两个步骤是连在一起完成的。
匿名内部类如果不定义变量引用,则也是匿名对象。代码如下:

new Person(){
    public void eat() {
        System.out.println(“我吃了”);
}
}.eat();
package com.itheima_03;

/*
 *  匿名内部类:
 *      可以把匿名内部类看成是一个没有名字的内部类
 *      定义在方法当中
 *      必须在定义匿名内部类的时候创建他的对象
 *  格式:
 *      new 类/接口()  {
 *          如果是创建了继承这个类的子类对象,我们可以重写父类的方法
 *          如果是创建了实现这个接口的子类对象,我们必须要实现该接口的所有方法
 *      };
 * 
 *  原理:而是创建了继承这个类的子类对象或者是创建了实现这个接口的子类对象
 */
public class InnerDemo4 {
    public static void main(String[] args) {
        Outer o = new Outer();
        o.method();
    }
}

interface Inner {
    public void function();
}

class Outer {
    public void method() {

        /*
         * new Inner() {
         * 
         * @Override public void function() { System.out.println("function"); }
         * 
         * }.function(); }
         */

        Inner i = new Inner() {
            @Override
            public void function() {
                System.out.println("function");
            }
        };
        
        i.function();
        i.function();
    }
}

你可能感兴趣的:(09.匿名内部类的概述和格式)