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(); } }