静态内部类、非静态内部类以及匿名类之间的区别
来源:互联网 发布:microsoft软件有哪些 编辑:程序博客网 时间:2024/06/13 18:25
每次被问到静态内部类和非静态内部类的区别时,我都不知道如何回答,所以特意花了一段时间来整理一下,有不对的地方也希望指正
首先我们知道一个类一旦被定义为静态的,那么这个类一定是内部类,所以我们如果想定义一个内部类,当然可以是静态的也可以是非静态的,
那么什么事匿名类呢,所谓匿名类是一种特殊的内部类,它是在一个表达式内部包含一个完整的类定义,常见的匿名类有监听器,并且匿名类只在该表达式内部有效
那么有什么区别呢,来看下面的一段代码,这段代码进行了详细的描述:
public class Test {public class NormInnerClass{/* * 非静态内部类可以定义实例变量,但静态变量一定要是常量(static final) * 非静态内部类一定不能定义静态方法 */private String a="normal inner class";private static final int b=10;public void getAB(){System.out.println("A"+a);System.out.println("B"+b);}}public static class StaticInnerClass{/* * 静态内部类可以定义实例变量,也可以定义静态变量 * 当然也可以定义静态方法和实例方法 * 同时可以肯定的是静态方法不能访问类中的非静态变量和方法 */private String a="static inner class";private static int b=9;public void getAB(){System.out.println("A"+a);System.out.println("B"+b);}public static void getB(){System.out.println(b);//System.out.println(a);//此处编译一定会报错}}public void getClassInfo(StaticInnerClass sc){//在Test类里可以使用这种定义来实例化内部类Test.NormInnerClass normClass=new Test.NormInnerClass();Test.StaticInnerClass staticClass=new Test.StaticInnerClass();normClass.getAB();//可以访问实例变量和方法,且static final变量不能改变值normClass.a="normal inner class variable";//在Test类中是可以使用内部类中的private变量System.out.println(normClass.a);staticClass.getAB();//可以访问内部类中的实例变量和方法staticClass.b=4;//能通过实例化的内部类对象访问静态变量和方法,但不推荐//当然也可以直接通过类名.变量名来访问类中的静态变量和方法StaticInnerClass.getB();System.out.println(NormInnerClass.b);sc.getAB();//也可以直接通过参数来访问内部类中的方法}public static void main(String[] args) {Test test=new Test();//在类外面比如main方法里,对于非静态内部类必须必须要实例化后再newTest.NormInnerClass normal=test.new NormInnerClass();normal.getAB();//对于静态内部类可以使用 “外部类名.内部类名” 来实例化,当然也可以使用非静态内部类的实例方法,同样也不推荐Test.StaticInnerClass stinc=new Test.StaticInnerClass();stinc.getAB();test.getClassInfo(new StaticInnerClass(){@Overridepublic void getAB(){System.out.println("我把StaticInnerClass中的getAB()方法重写了");}});}}这段程序将内部类做了一个总的概括
0 0
- 静态内部类、非静态内部类以及匿名类之间的区别
- 内部类:非静态内部类,静态内部类,局部内部类,匿名内部类详解
- 静态内部类和非静态内部类的区别
- 静态内部类和非静态内部类的区别
- 静态内部类和非静态内部类的区别
- 静态内部类和非静态内部类的区别
- 静态内部类和非静态内部类的区别
- 静态内部类和非静态内部类的区别
- 静态内部类和非静态内部类的区别
- 静态内部类和非静态内部类的区别
- 静态内部类和非静态内部类的区别
- 静态内部类和非静态内部类的区别
- 静态内部类和非静态内部类的区别
- 静态内部类和非静态内部类的区别
- 静态内部类和非静态内部类的区别
- 静态内部类和非静态内部类的区别
- 静态内部类和非静态内部类的区别
- 静态内部类和非静态内部类的区别
- MySQL 架构 - MVCC多版本并发控制
- 2015.8.31心情录
- 树莓派 Raspberry-Pi 折腾系列:系统安装及一些必要的配置
- 灵活强大的构建系统Gradle
- (4.2.16.3)判断某Activity是否在系统中存在?是否启动过?以及让它自行关闭
- 静态内部类、非静态内部类以及匿名类之间的区别
- iOS7 CookBook精彩瞬间(三)UIActivityViewController的基本使用及自定义Activity
- 【生成树计数】【矩阵树】【模板】
- OpenCv 获取某一区域的RGB平均值
- 工作心情--两个月有感
- Python--Tkinter之 Button()/Checkbutton()/Radiobutton()
- 【tarjan】【割点】
- java
- ee