day 7 匿名内部类
/* 匿名内部类: 其实就是内部的简化形式。 前提: 内部类必须继承或者实现外部类或接口。
格式: new 父类&接口(){}; 其实就是一个子类对象。有点胖。
为什么要有匿名内部类? 提高开发效率
*/
abstract class Test //Test 能不能创建对象? 不能 因为有抽象方法 -->抽象类的子类能创建对象,因为它覆盖来了父类方法
{
abstract void show();
}
class Outer
{
int x = 3;
//1定义内部类
class Inner
{
void show()
{
System.out.println(x);
}
}
//2定义内部类
class Inners extends Test
{
//重写了父类方法
void show()
{
System.out.println(x);
}
}
//为了内部类能对外访问,提供一个方法
public void method()
{
//写法一
Inner inner = new Inner();
inner.show();
//写法二
new Inner().show();
//匿名内部类
new Test()
{
public void show()
{
System.out.println("x=" + x);
}
}.show(); //其实就是创建了一个比较胖的对象,对象调用成员,格式上有些特殊
//典型的多态,父类引用子类的对象
Test test = new Test()
{
public void show()
{
System.out.println("x="+x);
}
};
test.show();
func(new Test()
{
public void show()
{
System.out.println("x=" + x);
}
} ); //其实就是创建了一个比较胖的对象,对象调用成员,格式上有些特殊
}
//将对象做为参数传递
public void func(Test t)
{
t.show();
}
}
public class InternalDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
Objectfunc();
new Outer().method();
//
function(new Test()
{
public void show(){System.out.println("123");}
});
}
public static void function(Test t)
{
t.show();
}
public static void Objectfunc()
{
new Object()//可以这样写但不能描述事物的具体含义
{
void show()
{
System.out.println("obj show");
}
}.show();
}
}

浙公网安备 33010602011771号