Java四种内部类的区别

内部类

内部类:在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。广泛意义上的内部类一般来说包括四种:成员内部类、静态内部类、匿名内部类、局部内部类。

(1)成员内部类

**定义:**成员内部类是最普通的内部类,它的定义为位于一个类的内部。

**权限:**成员内部类可以无条件访问外部类的所有成员属性和成员方法。

同名变量与方法:要注意的是,当成员内部类拥有和外部类同名的成员变量或者方法时,会发生隐藏现象,即默认情况下访问的是成员内部类的成员,如果要访问外部类的同名成员,ch需要以下边的形式访问。

外部类.this.成员变量

外部类.this.成员方法

**内部类对象的创建:**虽然成员内部类可以无条件的访问外部类的成员,但外部类如果要访问成员内部类的成员,必须先创建一个成员内部类的对象,再通过内部类对象来访问。成员内部类依附外部类而存在的,也就是说,如果要创建成员内部类的对象,前提是必须存在一个外部类的对象。

**内部类的权限:**内部类可以拥有private、protected、public、default访问权限。

**静态属性与方法:**非静态内部类不可以有静态属性和静态方法。

//一个类的内部类可以用public来修饰
public class Inner01{
	
	//i1代表Inner01内部类的成员变量
	int i1=100;
	//i2不能用static 修饰。非静态内部类中不能包含静态成员。
	
	static int i2=200;//报错
	
	//inTest01是Inner01内部类的非静态方法
	public void inTest01{
	system.out.println("inner test01");
	}
}
//静态方法只能被声明在静态类中或者顶层类中,在非静态内部类中不能定义静态的方法。
(2)静态内部类

**定义:**静态内部类也是定义在另一个类里面的类,只不过类在前面多了一个关键字static。静态内部类是不需要依赖外部类的,这点和类的静态成员属性和方法有点类似,并且他不能使用外部类的非static成员变量或者方法。

**理解:**静态内部类不能使用外部类的非static成员,因为在没有外部类的对象的情况下,可以创建静态内部类的对象,如果允许访问外部类的非静态成员,就会产生矛盾。因为外部类的非static成员必须依附于具体的对象。

//在一个类中可以定义一个静态内部类,其中静态内部类中可以同时包含非静态属性和方法,以及静态属性和方法。

public static class Inner02{
		int i1=1000;
		static int i2=2000;
		
		public void inTest01(){
		System.out.println(i1);
		System.out.println(i2);
		
		}
	public	static void inTest02(){
		System.out.println(new Inner02().i1);
		System.out.println(i2);
	}
 }
(3)匿名内部类

**定义:**匿名内部类是唯一一种没有构造器的类,正因为其没有构造器,所以匿名内部类的使用范围非常有限,大部分匿名内部类用于接口回调。匿名内部类在编译的时候由系统自动起名Outter$1.class。

**用途:**一般来说,匿名内部类用于继承其他类或是实现接口,并不需要增加额外的方法,只是对继承或者实现的方法进行重写或者实现。

//以匿名子类的方式创建Object对象,编译后会自动生成一个从1开始的class字节码文件
public Object obj=new Object(){};

//以匿名实现类的方式创建Serializable的ser对象,该对象实现了Serializable接口,编译后自动生成一个从1开始的class字节码文件。

private Serializable ser=new Serializable(){};

//匿名内部类重写了Inner01的test1方法
	
	new Inner01(){
		void test1(){
				System.out.println("匿名内部类中重写了Inner01的test1方法。")
		}
	}
(4)局部内部类

局部内部类是定义在一个方法或者一个作用域里面的类。他和成员内部类的区别在于局部内部类的访问权限仅限于方法内或作用域内。

image-20200521154652035
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值