Java基础学习笔记十五 内部类

本文详细介绍了Java中的内部类,包括成员内部类(非静态和静态)、匿名内部类及局部内部类的特点与用法。通过具体示例展示了各种内部类如何被定义、创建及访问成员变量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Java中内部类主要分为成员内部类(非静态内部类、静态内部类)、匿名内部类、局部内部类。
成员内部类(可以使用private、default、protected、public任意进行修饰。类文件:外部类$内部类.class)

a、非静态内部类(外部类里使用非静态内部类和平时使用其他类没什么不同)

  • ,一,非静态内部类必须寄存在一个外部对象里。因此,如果有一个非静态内部类对象那么一定存在对应的外部类对象。非静态内部类对象单独属于外部类的某个对象。
  • 二,非静态内部类可以直接访问外部类的成员,但是外部类不能直接访问非静态内部类成员。
  • 三,非静态内部类不能有静态方法、静态属性和静态初始化块。
  • 四,外部类的静态方法、静态代码块不能访问非静态内部类,包括不能使用非静态内部类定义变量、创建实例。
  • 五,成员变量访问要点:
    • 1,内部类里方法的局部变量:变量名。
    • 2,内部类属性:this.变量名。
    • 3,外部类属性:外部类名.this.变量名。

示例:成员变量的访问要点

public class TestInnerClass {
	public static void main(String[] args) {
		//创建内部类对象
		Outer.Inner inner =  new Outer().new Inner();
		inner.show();
	}
}
class Outer {
	private int age = 10;
	class Inner {
		int age = 20;
		public void show() {
			int age = 30;
			System.out.println("内部类方法里的局部变量age:" + age);//30
			System.out.println("内部类的成员变量age:" + this.age);//20
			System.out.println("外部类的成员变量age:" + Outer.this.age);//10
		}
	}
}

b、静态内部类

  • 1,定义方式
static class ClassName {
	//类体
}
  • 2,使用要点:
    • ①,当一个静态内部类对象存在,并不一定存在对应的外部类对象。因此,静态内部类的实例方法不能直接访问外部类的实例方法。
    • ②,静态内部类看做外部类的一个静态成员。因此,外部类的方法中可以通过:"静态内部类.名字"的方式访问静态内部类的静态成员,通过new 静态内部类()访问静态内部类的实例。
    • 静态内部类的访问:
class Outer {
	//相当于外部类的一个静态成员
	static class Inner {	
	}
}
public class TestStaticInnerClass {
	public static void main(String[] args) {
		//通过 new 外部类名.内部类名() 来创建内部类对象
		Outer.Inner inner = new Outer.Inner();
	}
}

c、匿名内部类
适合那种只需要使用一次的类。比如:键盘监听操作等等。
语法:

new 父类构造器(实参类表)\实现接口() {
	//匿名内部类类体
}

匿名内部类的使用:

this.addWindowListener(new WindowAdapter() {
	@Override
	public void windowClosing(WindowEvent e) {
		System.exit(0);
	}
});
this.addKeyListener(new KeyAdapter() {
	@Override
	public void KeyPressed(KeyEvent e) {
		myTank.KeyPressed(e);
	}
	@Override
	public void keyReleased(KeyEvent e) {
		myTank.KeyReleased(e);
	}
});

注意:

  • 1,匿名内部类没有访问修饰符。
  • 2,匿名内部类没有构造方法。因为它连名字都没有又何来构造方法。

d、局部内部类
定义在方法内部,作用域只限于本方法。
示例:方法中的内部类:

public class Test2 {
	public void show() {
		//作用域仅限于该方法
		class Inner {
			public void fun() {
				System.out.println("A");
			}
		}
		new Inner().fun();
	}
	public static void main(String[] args) {
		new Test2().show;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值