当前位置 : 主页 > 编程语言 > c++ >

java中内部类的问题

来源:互联网 收集:自由互联 发布时间:2021-07-03
内部类 一、内部类inner class1、定义:允许一个类的定义出现在另一个类中,将处于另一个类中的“寄生类”2、一个类有属性方法,还可以有内部类一个类A定义在另一个类B中,那A就是
内部类
一、内部类inner class
1、定义:允许一个类的定义出现在另一个类中,将处于另一个类中的“寄生类”
2、一个类有属性方法,还可以有内部类一个类
A定义在另一个类B中,那A就是B的内部类;
A和B在逻辑上是一个整体,A和B之间是从属关系;
3、作用:内部类A可以访问外部类B的私有属性;
内部类A的作用范围仅在于外部类B的内部有效;
外部类B的方法是可以访问内部类A的;
内部类A的对象必须通过外部类B对象创建,并且和外部类B对象关联,
所以又称--------实例内部类;
4、实例:Outer.java

测试类:TestInner.java
class   Outer
{
	private int size;
		/*
		* 内部类:继承、实现接口类的
		*
		*	
		*/
	//private class Inner 内部类私有,创建对象只能在外部类里的方法中创建对象

	  public class Inner{
		   int size = 10;
			public void doStuff()
			{
				size++;	//内部类可以访问外部类的私有属性
				Outer.this.size++;
				//System.out.println("outer size = "+Outer.this.size);
			}
			public int getOuterSize()
			{
				System.out.println("outer size = "+Outer.this.size);
				return size;
			}
		}
	public void testTheInner()
	{
		Inner i = new Inner();
		i.doStuff();
		System.out.println("inner size = "+i.getOuterSize());
	}
}
public class TestInner
{
	public static void main(String[] args)
	{
		Outer a = new Outer();//创建外部类对象
		Outer.Inner i = a.new Inner();
		i.doStuff();
		System.out.println("Inner size = "+i.getOuterSize());
		System.out.println("-----------------------------");
		a.testTheInner();
		System.out.println("-----------------------------");
		System.out.println("Inner size ="+i.getOuterSize());
	}
}


PS: JVM加载TestInner.java后,会生成TestInner.class,Outer.class,还有Outer$Inner.class三个字节码文件,加载到方法区的类代码区;
内部类字节码文件命名规范:外部类名$内部类名.class
5、外部类里面创建内部类对象,可以在外部类的方法中创建;
   在外部类外面创建内部类对象,必须先创建外部类对象,再创建内部类。
6、私有内部类:
一旦一个内部类是私有的,那该内部类的对象只能在该外部类的方法中创建
私有内部类也可以继承,也可以实现接口。
内部类一旦私有,省略名字→匿名类

二、方法内部类/局部内部类:定义在一个外部类的方法里
1、该内部类对象只能在该方法中创建,只能在该方法里有效;
2、有几个类就有几个字节码文件,该内部类的字节码文件也是:
外部类名$内部类名.class
3、创建一个外部类对象o,调用o的定义了方法内部类的方法,把内部类加载到内存,如果需要创建内部类对象,那就按照内部类的模板,创建一个内部类对象,但是该内部类对象的作用范围仅在包含他的这个方法里
4、方法内部类的对象也有其关联的外部类对象的引用
5、方法内部类只能访问该方法里的final修饰的局部变量
PS:输出一个对象的地址,其实是调用这个类的toString方法
网友评论