匿名内部类
2015-09-24 10:49
239 查看
/* 内部类定义在局部时, 1,不可以被成员修饰符修饰 2,可以直接访问外部类中的成员,因为还持有外部类中的引用。 但是不可以访问它所在的局部中的变量。只能访问被final修饰的局部变量。 */ class Outer { int x = 3; void method(final int a) { final int y = 4; class Inner { void function() { System.out.println(y); } } new Inner().function(); } } class InnerClassDemo3 { public static void main(String[] args) { Outer out = new Outer(); out.method(7); out.method(8); } } /* 内部类: */ class Outer { int x = 3; class Inner extends AbsDemo { int num = 90; void show() { System.out.println("show :"+num); } void abc() { System.out.println("hehe"); } } public void function() { //AbsDemo a = new Inner(); } } class InnerClassDemo4 { public static void main(String[] args) { new Outer().function(); } } /* 匿名内部类: 1,匿名内部类其实就是内部类的简写格式。 2,定义匿名内部类的前提: 内部类必须是继承一个类或者实现接口。 3,匿名内部类的格式: new 父类或者接口(){定义子类的内容} */ abstract class AbsDemo { abstract void show(); } class Outer { int x = 3; /* class Inner extends AbsDemo { void show() { System.out.println("show :"+x); } } */ public void function() { //AbsDemo a = new Inner(); new AbsDemo() { int num = 9; void show() { System.out.println("num==="+num); } }; //代表匿名子类对象 等同于上俩个注释 } } class InnerClassDemo4 { public static void main(String[] args) { new Outer().function(); } } /* 4,其实匿名内部类就是一个匿名子类对象。而且这个对象有点胖。 可以理解为带内容的对象。 5,匿名内部类中定义的方法最好不要超过3个。 */ abstract class AbsDemo { abstract void show(); } class Outer { int x = 3; /* class Inner extends AbsDemo { void show() { System.out.println("show :"+x); } } */ public void function() { /* new AbsDemo() { int num = 9; void show() { System.out.println("num==="+num); //可以打印出,因为这是 个对象,可以定义非final变量 } }.show(); new AbsDemo() { void show() { System.out.println("num==="+num); } }; */ /* new AbsDemo() { int num = 9; void show() { System.out.println("num==="+num); } void abc(){ System.out.println("num==="+num); } }.abc();//道理与上一个注释相同 ,也可以调用show() new AbsDemo() { int num = 9; void show() { System.out.println("num==="+num); } void abc(){ System.out.println("num==="+num); } }.abc();//也可以调用show() */ //AbsDemo a = new Inner(); // Inner in = new Inner(); // in.show(); // in.abc(); AbsDemo d = new AbsDemo() { int num = 9; void show() { System.out.println("num==="+num); } void abc() { System.out.println("haha"); } }; d.show(); //d.abc();//编译失败;因为父类中没有abc()方法 } } class InnerClassDemo4 { public static void main(String[] args) { new Outer().function(); } }
相关文章推荐
- 牛X素材推荐之TriangleRectangleLabelView
- [转]NMON服务器监控、指标说明
- avalon js实现仿google plus图片多张拖动排序附源码下载
- 从a站点跳转到b站点,通过url的参数判断是否让该用户选择身份
- java生成pdf报表
- 【4】Windows客户端C/C++编程规范“建议”——表达式和运算
- ES7之Decorators实现AOP示例
- 专车降价滴滴快车使命终结?
- 【疯狂labview】 Xcontrol+LVoop封装练习 Toolbar
- 跨域解决方案
- STL之二:vector容器用法详解
- Java基础知识强化56:经典排序之快速排序(QuickSort)
- Spring - Spring Data REST - Prevent The Methods in Event Handlers Be Triggered Twice
- Java中产生随机数的方法
- 直击2015东京电玩展:日本动漫IP“勾搭”中国游戏土豪
- iOS 代码实践总结
- Activity的启动过程
- 滴滴代驾骑虎难下 司机1人23部手机刷单
- ios 经典错误
- 解决 yum安装时报错 Error: Protected multilib versions: 报错