JAVA 内部类
来源:互联网 发布:Mac字幕太小 编辑:程序博客网 时间:2024/06/05 01:56
创建内部类
内部类的对象只能在与其外围类的对象相关联的情况下才能被创建。
构建内部类对象时,需要一个指向其外围类对象的引用,所以内部类自动拥有对其外围类所有成员的访问权。
class Outer { private int number = 5; public class Inner { public void output() { // 内部类可以访问外围类成员 System.out.println(number); } // 使用 .this 使内部类获得外围类的引用 public Outer outer(){ return Outer.this; } } // 定义方法创建内部类 public Inner inner() { return new Inner(); }}public class Test { public static void main(String[] args) { Outer outer = new Outer(); // 访问内部类要指定其所引用的外围类 // 使用 .new 创建其内部类 Outer.Inner inner = outer.new Inner(); // 或者 Outer.Inner inner = outer.inner(); // 访问内部成员 inner.output(); // 访问外围类方法 Outer.Inner inner1=inner.outer().inner(); }}
如果 class Inner 定义成 private ,那么只有其外围类可以访问。
内部类的继承
如果你理解“内部类需要外围对象的引用”,就能理解这个构造函数。
public class InheritInner extends Outer.Inner{ public InheritInner(Outer o){ o.super(); }}内部类不能被“重写”,只能用继承的方式实现“重写”功能。
匿名内部类
匿名内部类实际上就是简化定义内部类,但需要继承其他类或实现接口。
interface Anonymous { void print();}public class Test { public static void main(String[] args) { // 实现接口 new Anonymous(){ public void print(){ System.out.println("This is Anonymous Inner Class."); } }.print(); }}
匿名内部类只能扩展一个类或者实现一个接口。
class Anonymous { private int number; public Anonymous(int number){this.number=number;} public int getNumber(){return number;}}public class Test { public static void main(String[] args) { int param=0; // 继承父类,使用有参数构造器 new Anonymous(param){ public void print(){ System.out.println(this.getNumber()); } }.print(); }}
而在 jdk 8 中关于匿名内部类访问外部变量需要 final 这一规定已经不存在了,当然,你保留习惯也是对的。
public class Test { // 使用非 final 变量 public Anonymous anonymous(int param) { return new Anonymous() { private int a = param; public void print() { System.out.println(a); } }; } public static void main(String[] args) { new Test().anonymous(2).print(); }}
0 0
- 【Java】【内部类】Java 内部类简介
- [Java] Java 内部类
- Java 内部类(成员内部类、局部内部类、静态内部类和匿名内部类)
- Java内部类(成员内部类、静态内部类、局部内部类、匿名内部类)小结
- Java内部类(成员内部类、静态内部类、局部内部类、匿名内部类)小结
- Java内部类(成员内部类、局部内部类、静态内部类、匿名内部类)
- Java内部类(成员内部类、静态内部类、局部内部类、匿名内部类)小结
- Java内部类(成员内部类、静态内部类、局部内部类、匿名内部类)小结
- Java内部类(成员内部类、静态内部类、局部内部类、匿名内部类)小结
- java的内部类、匿名内部类、局部内部类
- java内部类之成员内部类、静态内部类
- java 成员内部类 局部内部类,匿名内部类
- Java 静态内部类/内部类
- java内部类、静态内部类 小结
- Java内部类,静态内部类
- JAVA 内部类与静态内部类
- java内部类--局部内部类
- Java 内部类以及匿名内部类
- centos7安装VirtualBox虚拟机
- twoSum,利用双指针返回下标
- AngularJS Digest 过程解析
- opencv 金字塔图像分割
- 如何让中间层MIDAS/DATASNAP支持大量的并发用户并且控制连接数量
- JAVA 内部类
- 构建乘积数组
- Activity Recognition行为识别
- iOS开发系列--数据存取
- jsp与javaBean
- 用Quatus13构建一个方波的FSK调制解调电路的常见问题
- 特征检测和跟踪经典理论
- 插入排列与绝对值排列
- 详细分析罕见的ClassCircularityError异常导致的StackOverflowError