Java中内部类的详细使用方法

内部类的使用

  1. 定义类的作用:

定义变量、创建实例、作为父类被继承

  1. 在外部类使用内部类

在外部类使用内部类与平时普通类的使用一样,可以直接通过内部类类名进行new一个新的对象。区别: 不要在外部类的静态成员(包括变量、方法)尝试使用非静态的内部类。

package com.InnerOuter;

public class Outter_6 {
	inner_6 i6 = new inner_6();
	
	public static void out() {
		System.out.println(i6.s);
	}
	public class inner_6{
		String s = "inner_s";
	}
}

  1. 在外部类以外使用非静态内部类。首先 确保内部类不能是private修饰的成员,内部类是private修饰的成员只能是内部类访问。其他修饰符则根据修饰符的范围进行选择访问。在外部类之外的地方使用内部类在声明的地方也有点区别,在外部类以外的地方声明内部类的实例,必须是建立在外部类的基础之上。
package com.InnerOuter;

import com.InnerOuter.Outter_6.inner_6;

public class Outter_6Run {

	public static void main(String[] args) {
		//在外部类之外的类定义一个内部类实例
		Outter_6.inner_6 i6 = new Outter_6().new inner_6();
		
		//等价于下面的代码
		//定义内部类变量
		Outter_6.inner_6 i66 ;
		//创建外部类实例,让内部类寄生在实例里面
		Outter_6 o6 = new Outter_6();
		//创建内部类实例
		i66 = o6.new inner_6();
		
	}
}

在外部类以外的地方创建内部类实例,这个时候的内部类名应该是 Outter_6.inner_6 ,又因为非静态内部类必须是根基与外部类之上,所以需要一个外部类实例来调用内部类构造器 o6.new inner_6()

  1. 如果有一个外部类以外的类继承了内部类,成为内部类的子类,那么在调用构造器的时候也需要格外的注意。

//此段代码与jdk的版本有关系,较低版本会发生编译错误,建议自行测试一下
package com.InnerOuter;

public class Outter_6_ex extends Outter_6.inner_6{

	public Outter_6_ex oex( Outter_6 o ) {
		o.super();
	}
}

  1. 在外部类以外使用静态内部类。静态内部类本身就是和外部类相关的(类内部类),因此在声明静态内部类实例的时候,不再需要使用到外部类对象。只需要使用外部类即可。
//创建一个外部类和静态内部类
package com.InnerOuter;

public class Outter_7 {
	public static class inner_7		
	}
}

//创建一个运行类
package com.InnerOuter;

public class Outter_7Run {

	public static void main(String[] args) {
		//声明内部类对象
		Outter_7.inner_7 oi = new Outter_7.inner_7();
		//拆分改写
		//创建变量
		Outter_7.inner_7 oii ;
		//new一个静态内部类实例
		oii = new Outter_7.inner_7();
	}

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章