Java学习笔记(四)——匿名类

匿名对象使用方式:

  • 当对对象的方法只调用一次时,可以用匿名对象来完成,这样写比较简化。如果对一个对象进行多个成员调用,必须给这个对象起个名字。
  • 可以将匿名对象作为实际参数进行传递。

内部类访问规则:

  • 内部类可以直接访问外部类中的成员,包括私有。之所以可以直接访问外部类中的成员,是因为私有类中持有一个外部类的引用,格式:外部类名.this
  • 外部类要访问内部类,必须建立内部类对象。

内部类的访问格式:

  • 当内部类定义在外部类的成员位置上,而且非私有,可以在外部其它类中,直接建立内部类对象。

格式:外部类名.内部类名 变量名=外部类对象.内部类对象;
Outer.Inner in=new Outer().Inner();

  • 当内部类在成员位置上,就可以被成员修饰符所修饰。

private:将内部类在外部类中进行封装;
static:内部类就具备static的特性

当内部类被static修饰后,只能直接访问外部类中的static成员,出现访问局限(当内部类中定义了静态成员,该内部类必须是static;当外部类中的静态方法访问内部类时,内部类也必须是static)。

在外部其它类中,直接访问static内部类的非静态成员
new Outer.Inner().function();
在外部其它类中,直接访问static内部类的静态成员
Outer.Inner.function();


代码示例

interface Inter{
    void method();
}
class Test_anonymous{
    static Inter function(){
        return new Inter(){     //匿名对象类
            public void method(){
                System.out.println("method run");
            }
        };
    }
}
class 匿名内部类 {
    public static void main(String[] args){
        Test_anonymous.function().method();
        show(new Inter(){       //匿名内部类
            public void method(){
                System.out.println("method show run");
            }
        });
        new Object(){       //匿名内部类
            public void function(){
                System.out.println("function run");
            }
        }.function();
    }
    public static void show(Inter in){
        in.method();
    }
}

你可能感兴趣的:(Java,java)