java四种内部类(静态内部类,成员内部类,方法内部类,匿名内部类)详解
来源:互联网 发布:看图软件acdsee 编辑:程序博客网 时间:2024/04/26 03:36
java四种内部类(静态内部类,成员内部类,方法内部类,匿名内部类)详解
**简而言之,内部类的目的在于方便使用外部类的方法及域,为外部类的实现提供服务。可分为四种内部类(静态内部类,成员内部类,方法内部类,匿名内部类)。下面是具体使用方法
1、静态内部类的使用方法
/** * 测试静态内部类 * @author Hunter */import test.OuterClass01.StaticNestedClass;public class Demo01 { public static void main(String[] args) { //在不相关类中,可以直接创建静态内部类的对象(不需要依赖外部类的对象) OuterClass01.StaticNestedClass ocsnc = new OuterClass01.StaticNestedClass(); StaticNestedClass snc = new StaticNestedClass();//直接创建需要导入 //直接调用静态内部类的静态方法 OuterClass01.StaticNestedClass.innerMethod(); }}class OuterClass01{ static int a = 10; int b = 20; private static void outerMethod(){ System.out.println(a); } //定义静态内部类,与外部内的静态域同一个级别 static class StaticNestedClass{ //静态内部类可以包含静态域与非静态域 int c = 10; static int d = 20; //静态内部类可以直接使用外部类的静态域和静态方法,不可以使用外部类的非静态域和方法 static public void innerMethod(){ a = 20; outerMethod(); } }}
2、成员内部类的使用方法
/** * 测试成员内部类 * @author Hunter */import java.util.Date;public class Demo02 { public static void main(String[] args) { //在不相关类中建立成员内部类的对对象的方法,必须先建立外部类对象 OuterClass02 oc = new OuterClass02(); OuterClass02.NestedClass nc = oc.new NestedClass(); nc.innerMethod(); }}class OuterClass02{ private static int a = 10; private int b = 20; //定义一个成员内部类,相当于外部类的一个普通域 public class NestedClass{ //成员内部类只能拥有非静态域和方法,或者加了final声名的编译时的常量静态值 //采用这种机制的原因在于,假设定义了static NestedClass nc = new NestedClass(); //在不相关类中就可以利用 OuterClass02.NestedClass.nc来访问成员内部类的对象, //这样就完全脱离了外部类对象,不符合成员内部类初衷. int c = 10;// static int d = 20;//不行 static final int e = 30; //可以// static final Date date = new Date();//不行 public void innerMethod(){ //成员内部类可以直接访问外部类的域及方法(包括private),使用OuterClass02.this表示外部类; //这表明成员内部类的对象的存在必须依赖于外部类对象 OuterClass02.this.b = 30; System.out.println(OuterClass02.this); System.out.println(this); } }}
3、方法内部类的使用方法
/** * 测试方法内部类(局部内部类) * @author Hunter * */public class Demo03 { public static void main(String[] args) { OuterClass03 oc = new OuterClass03(); oc.method(); }}class OuterClass03{ public void method(){ int a = 10; final int b = 10; //定义一个方法内部类(局部内部类),方法内部类与方法中的域属于一个级别,因此不能加modifier //方法内部类只能在定义的方法中使用 class MethodNestedClass{ //方法内部类中只能包含非静态域和方法 int c = 10;// static int d = 10;//不行 public void InnerMethod(){ //方法内部类不能访问定义它的方法的局部变量,除非这个变量被声名成final //编译器做了优化,将外部方法的域转化成常量 System.out.println(a);//编译器通过,不建议这么使用,早期编译器无法通过// a = 20;//不行 System.out.println(b);//final修饰可以引用,不能修改值 //采用此机制的原因在于,方法(通过方法针压栈)的生命周期与方法内部类(存在堆中)的生命周期不一致 } } MethodNestedClass mnc =new MethodNestedClass(); mnc.InnerMethod(); } }
4、匿名内部类的使用方法
/** * 测试匿名内部类 * @author zxt * */public class Demo04 { public static void main(String[] args) { new OuterClass04().mehtod(); }}class OuterClass04{ //测试创建匿名内部类的三种方式 //值得注意的是,匿名内部类需要注意其属于方法内部类还是成员内部类,符合相应的特性 public void mehtod(){ //接口式创建匿名内部类,new一个实现该接口的类 Runnable run = new Runnable(){ @Override public void run() { } }; //继承式创建匿名内部类(可继承抽象类或非抽象类),new一个继承该类的新类 AbstractClass ac =new AbstractClass(){ @Override public void sayHello() { System.out.println("Hello!"); } }; ac.sayHello(); //参数式创建匿名内部类 getAbstractClass(new AbstractClass(){ @Override public void sayHello() { System.out.println("Hello!"); } }); } private void getAbstractClass(AbstractClass ab){ ab.sayHello(); }} abstract class AbstractClass{ public abstract void sayHello(); }
1 0
- java四种内部类(静态内部类,成员内部类,方法内部类,匿名内部类)详解
- Java内部类(成员内部类、局部内部类、静态内部类、匿名内部类)
- JAVA之内部类--成员内部类- 静态内部类- 方法内部类- 匿名内部类
- Java 内部类详解(成员内部类、静态内部类、局部内部类、匿名内部类)
- Java 内部类(成员内部类、局部内部类、静态内部类和匿名内部类)
- Java内部类(成员内部类、静态内部类、局部内部类、匿名内部类)小结
- Java内部类(成员内部类、静态内部类、局部内部类、匿名内部类)小结
- Java内部类(成员内部类、静态内部类、局部内部类、匿名内部类)小结
- Java内部类(成员内部类、静态内部类、局部内部类、匿名内部类)小结
- Java内部类(成员内部类、静态内部类、局部内部类、匿名内部类)小结
- 内部类---(静态内部类、成员内部类、匿名内部类、局部内部类)
- java内部类,内部类的共性,成员内部类,方法内部类匿名内部类,静态嵌套类,不解
- JAVA中的四个内部类-成员内部类,静态内部类,方法内部类,匿名内部类
- Java 各种内部类(成员内部类、局部内部类、静态内部类和匿名内部类)
- Java 内部类(分四种:成员内部类、局部内部类、静态内部类和匿名内部类)
- Java基础_内部类:静态内部类、成员内部类、局部内部类、匿名内部类 (转)
- Java 内部类(成员内部类、局部内部类、静态内部类和匿名内部类)
- Java基础_内部类、静态内部类、成员内部类、局部内部类、匿名内部类 (转)
- [LeetCode]Maximum Depth of Binary Tree
- 出来行,迟早是要还的(篇六):衣带渐宽终不悔
- hdu 5360 Hiking
- 设计模式-访问者模式
- 第16章:ImageView及其子类
- java四种内部类(静态内部类,成员内部类,方法内部类,匿名内部类)详解
- Swift didSet 用处
- leetcode 87: Scramble String
- 如何正确的书写网站底部版权(分享来自织梦团队)
- Android 布局
- Leetcode #136 Single Number
- 优化的python生产者消费者实现
- 欢迎使用CSDN-markdown编辑器
- 读书笔记之c和指针(7)