Java学习——内部类
来源:互联网 发布:js改变inpute宽度 编辑:程序博客网 时间:2024/04/27 21:41
一、成员内部类
先来看一个例子:
public class Outer { private int a=10;//外部类成员变量 public Outer(){ System.out.println("Outer initial"); } public class Inner{ private int a=20;//内部类成员变量 public Inner(){ System.out.println("Inner initial"); } public void print(){ int a=30;//内部类局部变量 System.out.println(a); System.out.println(this.a);//不可写成Inner.a System.out.println(Outer.this.a);//不可写成Outer.a } } public static void main(String[] args) { // TODO 自动生成的方法存根 Outer outer=new Outer(); Inner inner=outer.new Inner(); /*上面两行可以合并写成 * Inner inner=new Outer().new Inner() */ inner.print(); } }
从上面例子我们可以看到:
1、成员内部类以实例成员的形式存在于外部类中。
2、内部类可以访问外部类的所有成员而不存在任何限制,但必须使用如Outer.this.a的形式。
3、内部类对象中不能有静态成员,这是因为内部类的实例对象是外部类实例对象的一个成员。
注意点:
1、不可在内部类内部对外部类成员变量进行赋值。
2、创建内部类实例必须先创建外部类实例,如上所示。
二、静态内部类
先来看一个例子:
public class Outer { private static int a=10;//外部类成员变量 public Outer(){ System.out.println("Outer initial"); } public static class Inner{ private int a=20;//内部类成员变量 public Inner(){ System.out.println("Inner initial"); } public void print(){ int a=30;//内部类局部变量 System.out.println(a); System.out.println(this.a);//不可写成Inner.a //System.out.println(Outer.this.a);这是错误的,见下,this表示对象 System.out.println(Outer.a);//只有当a为静态变量时才可引用,此时可以直接写a来访问外部类变量a,但由于内部类也存在,会被顶替 } } public static void main(String[] args) { // TODO 自动生成的方法存根 Inner inner=new Inner();//可直接创建静态内部类对象 inner.print(); }
从上面例子我们可以看到:
1、静态内部类中引用的外部类中的成员变量a必须是static修饰的。因为静态内部类是以外部类中静态成员变量的形式出现的,即它对所有外部类对象都是相同的,这些对象共用一个内存地址()。此时若在静态内部类中使用非静态成员变量,这显然是不合适的,因为非静态成员变量对于每个外部类对象可能是不同的。
2、静态内部类中对于外部类的static成员变量a不可以通过Outer.this.a引用。this特指某个对象,而在静态内部类对于所有对象,即整个类试用。
3、可以直接创建静态内部类的对象,而不用像成员内部类那样先创建外部类对象。
三、方法内部类
先来看一个例子:
public class Outer { int a=10; //外部类中的方法 public void show(){ final int b=25;//变量 int c=13;//变量 //方法内部类 class MInner{ int c=2;//内部类中变量 public void print(){ System.out.println("访问外部类中的变量a:"+a); System.out.println("访问外部类的方法中的常量a:"+b); System.out.println("访问内部类中的变量c:"+c); } } MInner mi=new MInner();//创建方法内部类的对象 mi.print();//调用内部类的方法 } //测试方法内部类 public static void main(String[] args) { // TODO 自动生成的方法存根 Outer hello=new Outer();//创建外部类的对象 hello.show();//调用外部类的方法 }}
从上面例子我们可以看到:
1、方法内部类就是内部类定义在外部类的方法中,方法内部类只在该方法的内部可见,即只在该方法内可以使用。
2、方法内部类可以直接使用外部类中的变量。
3、由于方法内部类不能在外部类的方法以外的地方使用,因此方法内部类不能使用访问控制符和 static 修饰符。
0 0
- 【Java】学习笔记——内部类
- JAVA学习——内部类
- Java学习笔记——内部类
- Java学习——内部类
- java学习笔记——内部类
- JAVA学习——匿名内部类
- 学习笔记——JAVA 内部类
- 知识学习——Java内部类
- java—内部类
- Java—内部类
- Java学习:内部类
- Java内部类学习
- java内部类学习!!
- java学习---内部类
- Java 内部类学习
- 【JAVA学习】内部类
- java学习-内部类
- java内部类学习
- android利用SQLiteOpenHelper类实现对数据库的增删查改操作
- 每日一佳——Structure Preserving Embedding(Blake Shaw et al. ,ICML,2009)
- Python--简单的端口扫描器
- C语言enum枚举类型
- JAVA基础复习:涉及并发的一些基础概念
- Java学习——内部类
- CALayers 实现带圆角和阴影的图片
- 程序员面试:电话面试问答Top 50
- 走迷宫
- chrome.tabs.onUpdated.addListener的应用
- matlab中text 函数在显示字符串时的使用方法
- Android中webview和js之间的交互
- 教你如何在windows上手动安装SASS
- 过拟合