Java学习之内部类--InnerClass
来源:互联网 发布:eai是什么软件 编辑:程序博客网 时间:2024/05/16 13:51
内部类
内部类(Nested Class) 嵌套类
内部类可以使用修饰符(public,protected,default,private)
demo01:
Inner in = new Inner();
外部类外部
三种使用方法:
继承式
接口式
参数式
一、内部类介绍:
内部类(Nested Class) 嵌套类
- 静态内部类
- 非静态内部类
- 普通内部类(也称为:成员内部类)
- 在一个类(外部类)中直接定义的内部类
- 匿名内部类
- 方法内部类
- 在一个方法(外部类的方法)或代码块中定义的内部类
内部类可以使用修饰符(public,protected,default,private)
demo01:
public class Demo01 {//静态内部类private static class StaticInnerClass{}//普通内部类class InnerClass{}void say(){//方法内部类class MethodClass{}//匿名内部类Runnable run = new Runnable(){@Overridepublic void run() {}};}}
二、静态内部类
静态内部类基本用法:
- 静态内部类可以保护静态成员,非静态成员。
- 静态内部类可以直接调用外部类的静态属性,静态方法,但不能调用外部类的普通属性,普通方法。
- 在不相关类中,可以直接创建静态内部类的对象(不需要通过所在外部类)
- 静态内部类实际上和外部类联系很少,也就是命名空间上的联系。
import TestClass.InnerClass.StaticInnerClass;public class Demo02 {public static void main(String[] args) {//两种方式实例化//InnerClass.StaticInnerClass is = new InnerClass.StaticInnerClass();StaticInnerClass is = new StaticInnerClass();//导入包 TestClass.InnerClass.StaticInnerClass;}}class InnerClass{int a = 1;static int b =2;//静态内部类public static class StaticInnerClass{int c=3;static int d=4;public void test(){//System.out.println(a);静态内部类不能调用外部类的普通成员,只能调用静态成员。System.out.println(b);}}}
三、成员内部类(普通内部类)
1.成员内部类基本用法:
- 成员内部类就像一个成员变量一样存在与外部类中。
- 成员内部类可以访问外部类的所有成员(包含:private的)
- 成员内部类的this值内部类对象本身。要拿到外部类的对象可以使用: 外部类名+this.
- 成员内部类的对象是一定要绑定到一个外部类的对象上的,因此,创建成员内部类对象时需要持有外部类对象的引用。因此,要先有外部类对象,后有成员内部类对象。
- 成员内部类不能有静态成员。
2.成员内部类对象的创建方式:
外部类内部Inner in = new Inner();
外部类外部
Inner in = new Outer().new Inner();
public class Demo03 {public static void main(String[] args) {//实例化Outer03 outer = new Outer03();InnerClass03 inner = outer.new InnerClass03();inner.test();}}class Outer03{private int a=1;int b=2;class InnerClass03{int c=3;//static int d=4;不能有静态属性final int e=5;//除非声明为final,并且只有编译器可以确定的值得常量表达式//如果这样可以的话,那oUTER03.InnerClass.in直接获得内部类对象,这是成员内部类的对象就完全脱离了外部类的控制!与设计初衷违背//static InnerClass03 in= new InnerClass03();void test(){System.out.println(a);System.out.println("内部类对象:"+this);//成员内部类对象的创建,必须先有外部类对象System.out.println("外部类对象:"+Outer03.this);//引用了外部类的对象}}}
四、方法内部类(局部内部类)
方法类基本用法:
- 方法内部类的地位和方法内的局部变量的位置类似。
- 因此不能修饰局部变量的修饰符也不能修饰局部内部类,比如public,private,protected,static,transient等。
- 方法内部类只能在声明的方法内是可见的
- 因此定义局部内部类之后,想用的话就要在此方法内直接实例化,记住这里顺序不能反了,一定是要先声明后使用,否则编译器会说找不到。
- 方法内部类不能访问定义它的方法内的局部变量,除非这个变量被定义为final.
- 本质原因:局部变量和方法内部类生命周期不一致所致
- 方法内部类只能包含非静态成员!
public class Demo04 {public static void main(String[] args) {}}class outer04{int c=2;void test(){//public int a=1;//错误不能有修饰符//static int b=20;方法内部类中只能定义非静态成员int d=3;final int e=4;class InnerClass04{void test(){//System.out.println(d);方法内部类不能使用所在方法的普通变量,除非是常量System.out.println(e);System.out.println(c);//可以引用外部类的变量}}InnerClass04 in = new InnerClass04();}}
五、匿名内部类
1.匿名内部类基本用法:
- 匿名内部类的实例化方式:new InterfaceOrClass{};
- 意思是创造一个实现(继承)了InterfaceOrClass的类的对象;
- 根据声明的位置,判断匿名内部类是成员内部类还是方法内部类。
- 注:一般是方法内部类,这是就具备方法内部类的特性。
三种使用方法:
继承式
接口式
参数式
public class Demo05 {public static void main(String[] args) {Outer05 outer =new Outer05();outer.test();}}class Outer05{public void test02(Father father){father.run();}public void test(){//匿名内部类,由于本内部类定义在方法中,也是方法内部类Runnable run = new Runnable(){@Overridepublic void run() {}};//匿名内部类,继承式Father father = new Father(){public void run(){System.out.println("子类");}};father.run();//参数式test02(new Father(){public void run(){System.out.println("参数式");}});}}class Father{public void run(){System.out.println("父类");}}
0 0
- Java学习之内部类--InnerClass
- Java InnerClass(内部类)
- java 内部类 InnerClass
- java之内部类(InnerClass)----非静态内部类、静态内部类、局部内部类、匿名内部类
- java之内部类(InnerClass)----非静态内部类、静态内部类、局部内部类、匿名内部类
- java之内部类(InnerClass)----非静态内部类、静态内部类、局部内部类、匿名内部类
- java学习之内部类
- java学习之内部类
- java学习之内部类
- Java学习之内部类
- Java 内部类(InnerClass)
- Java学习笔记之内部类
- Java学习札记之内部类
- java学习123之内部类
- Java学习笔记之内部类
- Java学习笔记之内部类
- Java基础学习之内部类
- java学习笔记之内部类
- Android 屏幕适配
- 第一章第6题
- 11.如何自学Struts2之Struts2验证[视频]
- LeetCode - Remove Element
- Innodb事务隔离级别-repeatable read详解
- Java学习之内部类--InnerClass
- 移位操作符
- 北邮ACM新生赛2015 题解
- bootstrap导航
- 数据库第一章作业
- 无线LED智能照明控制系统
- zoj 3261 Connections in Galaxy War 删边并查集模板
- Android之查看外部依赖jar的源码_android private libralies does not allow modifications to source
- android跟服务器使用json传递数据