Java:内部类说明及其使用

内部类说明及其使用

1.为什么要学习内部类?

能够提高类成员的安全性。

2.定义

内部类就是把类定义在类的内部。

如果A 类中定义 B类,那么 A类就是外部类,B类就是内部类,,其他与A类同级别的类就是外界。

3.内部类的分类

1)成员内部类

访问格式:外部类类名.内部类类名 对象名 = new 外部类对象().new 内部类对象();

当外部类成员名字和内部类成员名字重名的时候: 外部类类名.this.成员

内部类调用范例:

public class InnerClassDemo02 {
	public static void main(String[] args) {
		Outer2.Inner oi = new Outer2().new Inner();
		oi.show();
	}
}

class Fu {
	int num = 50;
	
	public void show() {
		int num = 60;
		System.out.println(num);
	}
}

class Outer2 extends Fu{
	int num = 40;
	// 成员内部类
	class Inner {
		int num = 30;
		
		public void show() {
			int num = 20;
		
			System.out.println(num);	// 输出20
			
			System.out.println(this.num);// 输出30
		
			System.out.println(Outer2.this.num); // 输出40
			
			System.out.println(Outer2.super.num);// 输出50
			
			Outer2.super.show();// 输出60
		}
	}
}

2)局部内部类

局部内部类只能够在局部创建对象访问

范例:

public class InnerClassDemo04 {
	public static void main(String[] args) {
		Outer3 outer3 = new Outer3();
		outer3.show();
	}
}

class Outer3 {

	public void show() {
		class InnerX {    //内部类
			int num = 20;
			
			public void show() {
				System.out.println("Outer3.show().Inner.show()");
			}
		}
		
		InnerX innerX = new InnerX();  //内部类实例化
		System.out.println(innerX.num);
		innerX.show();
	}
}

以上的输出结果为:

20
Outer3.show().Inner.show()

局部内部类需要在局部实例化,同时局部内部类不的调用不能在类创建之前,局部的执行顺序由上至下。

3)静态内部类

访问格式: 外部类类名.内部类类名 对象名 = new 外部类类名.内部类类名();

访问非静态成员:创建静态内部类对象访问

访问静态成员:直接通过外部类类名.内部类类名.内部类静态成员

4)匿名内部类

匿名内部类: 这个本质就是 一个 继承/实现了某个类(接口,普通类,抽象类)的子类匿名对象

格式:

new 类名() {

​ [重写方法;]

};

特点: 它是一个对象,它是一个子类对象,同时它是子类匿名对象。

public class InnerClassDemo04 {
	public static void main(String[] args) {
		// 利用多态
		Object s = new Object() {
			@Override
			public String toString() {
				return "今晚打老虎";
			}
		}.toString();
		System.out.println(s);
		// 通过父类引用变量名访问多个方法
	}
}

输出结果为:今晚打老虎。

4.内部类的特点

  • 内部类编译后生成class文件的格式:外部类类名$内部类类名;
  • 内部类可以访问外部类的所有成员,包括私有成员;
  • 外部类访问内部类成员,必须创建内部类对象;
  • 外界访问外部类成员,需创建外部类对象,再由外界访问内部类成员;
  • 内部类将类和类之间产生了关系,提高了耦合性,降低可读性,慎用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值