内部类和匿名内部类
来源:互联网 发布:我要开网络推广公司 编辑:程序博客网 时间:2024/05/29 17:17
把类定义在其他类的内部, 这个类就被称为内部类。
举例: 在类 A 中定义了一个类 B, 类 B 就是内部类。
内部类的访问特点:
内部类可以直接访问外部类的成员, 包括私有。
外部类要访问内部类的成员, 必须创建对象。
按照内部类在类中定义的位置不同, 可以分为如下两种格式:
成员位置(成员内部类)
一般内部类就是不让外界直接访问的。
成员内部的常见修饰符:private 、static
private 为了保证数据的安全性
static 为了让数据访问更方便(ps:被静态修饰的成员内部类只能访问外部类的静态成员)
class Outer { private int num = 10; private static int num2 = 100; //内部类用静态修饰是因为内部类可以看出是外部类的成员 public static class Inner { public void show() { //System.out.println(num); System.out.println(num2); } public static void show2() { //System.out.println(num); System.out.println(num2); } }} class InnerClassDemo4 { public static void main(String[] args) { //使用内部类 // 限定的新静态类 //Outer.Inner oi = new Outer().new Inner(); //oi.show(); //oi.show2(); //成员内部类被静态修饰后的访问方式是: //格式: 外部类名.内部类名 对象名 = new 外部类名.内部类名(); Outer.Inner oi = new Outer.Inner(); oi.show(); oi.show2(); //show2()的另一种调用方式 Outer.Inner.show2(); }}
局部位置(局部内部类)
可以直接访问外部类的成员
可以创建内部类对象, 通过对象调用内部类方法, 来使用局部内部类功能
局部内部类访问局部变量的注意事项:
必须被 final 修饰。
因为局部变量会随着方法的调用完毕而消失, 这个时候, 局部对象并没有立马从堆内存中消失, 还要使用那个变量。 为了让数据还能继续被使用, 就用 fianl 修饰, 这样, 在堆内存里面存储的其实是一个常量值。 通过反编译工具可以看一下。
class Outer { private int num = 10; public void method() { //int num2 = 20; //final int num2 = 20; class Inner { public void show() { System.out.println(num); //从内部类中访问本地变量 num2; 需要被声明为最终类型 System.out.println(num2);//20 } } //System.out.println(num2); Inner i = new Inner(); i.show(); }} class InnerClassDemo5 { public static void main(String[] args) { Outer o = new Outer(); o.method(); }}
上述例子能看出来局部内部类的执行范围只能在它其中的方法中。
匿名内部类
就是内部类的简化写法。
前提:1. 存在一个类或者接口2.这里的类可以是具体类也可以是抽象类。
格式:new 类名或者接口名() {重写方法;}
本质:是一个继承了类或者实现了接口的子类匿名对象
interface Inter { public abstract void show(); public abstract void show2();}class Outer { public void method() { Inter i = new Inter() { //多态 public void show() { System.out.println("show"); } public void show2() { System.out.println("show2"); } }; i.show(); i.show2(); }}
阅读全文
0 0
- 内部类和匿名内部类
- 内部类和匿名内部类
- 内部类和匿名内部类
- 内部类和匿名内部类
- 内部类和匿名内部类
- 内部类和匿名内部类
- 内部类和匿名内部类
- 内部类和匿名内部类
- 内部类和匿名内部类
- 内部类和匿名内部类
- 内部类和匿名内部类
- 内部类和匿名内部类
- 匿名内部类和内部类
- 内部类和匿名内部类
- 内部类和匿名内部类
- java 内部类 和 匿名内部类
- java 内部类和匿名内部类
- 内部类和匿名内部类
- Redhat7 Firewalld防火墙
- json_JSON数据格式和 serialize数据格式的异同和使用
- C++ SDL教程翻译 Lesson 03 Event Driven Programming
- 如何写一个单利模式
- 磁盘阵列 和 分布式文件系统有什么区别?
- 内部类和匿名内部类
- JAVAWEB之css
- 王学岗csdn实现闪屏界面———策略模式+属性动画
- Thymeleaf模板的使用
- Java 类——局部变量
- c#将dataGridView中显示的数据导出到excel中
- 25岁就死了,75才埋,程序员们的中年危机:有点懵
- 在Spark上通过自定义RDD访问HBase
- mybatis中xml文件第一行报错解决办法