Java内部类--学习笔记

本文详细解读了Java内部类的两种类型(成员内部类与局部内部类),强调了私有和静态修饰的影响,并介绍了匿名内部类的用法。通过实例演示了如何访问和利用内部类的资源,适合进一步学习Java高级特性。

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

                                                                                          Java 内部类(Inner class)--学习笔记

1.类里面在定义类。形式:

class  Out{//外部类

     class In{//内部类

    }

}

2.特点:

(1)内部类可以直接访问外部类中的成员,包括私有的成员

(2)外部类要访问内部类的成员,必须建立内部类的对象

(3)分为成员内部类(类里方法外)和局部内部类(方法里)

3.成员内部类与局部内部类

package innerclass;
/**总结:
 * 内部类分为:1.成员内部类(类里方法外)
 *         2.局部内部类(方法里)--不常用。注意:直接调用外部类的方法是无法触发局部内部类的功能的,需要再外部类中创建内部类对象并且调用功能
 * 局部内部类的功能才能被调用    
 * 
 *外部类:想要使用内部类资源,必须先创建内部类对象,通过内部类对象来访问
 *内部类:可以使用外部类的资源,包括私有资源*/
public class Test1 {
	public static void main(String[] args) {
		//创建内部类对象
		Out.In1 innerClass = new Out().new In1();
		innerClass.eat1();

		System.out.println("***********无情的分割线*********");

		//当在外部类方法里创建局部内部类并且调用功能后,局部内部类的功能才能被调用
		new Out().drink();
	}

}
class Out{//创建外部类
	String name="外部类成员变量";
	private int age;

	public void drink() {
		System.out.println("外部类普通方法");

		//创建局部内部类
		class In2{
			public void eat2() {
				System.out.println("局部内部类普通方法");
			}
		}


		//外部类使用成员内部类资源,必须先创建内部类的对象,通过对象来调用
		In1 in = new In1();
		System.out.println(in.inName);
		in.eat1();
		System.out.println("*******无情的分割线*********");
		//使用局部内部类的资源,需要在方法里创建局部内部类的对象
		In2 in2 = new In2();
		in2.eat2();
	}


	//创建成员内部类
	class In1{
		String inName="成员内部类-成员变量";
		public void eat1() {
			System.out.println("成员内部类-普通方法");

			//内部类可以使用外部类的资源,包括私有资源
			System.out.println(name);
			System.out.println("外部类私有成员age="+age);//使用外部类私有成员变量
		}

	}
}

4.被private修饰和static修饰

package innerclass;

public class Test2 {
    public static void main(String[] args) {
    	//创建外部类对象,间接访问私有内部类资源
		new Out2().getIn();
		
		//调用静态内部类普通方法
		new Out2.In3().play();
		
		//调用静态内部类静态方法
		 Out2.In3.play1();//当内部类被static修饰以后,加上“new”会报错
	}
}
class Out2{
	//提供外界访问私有化内部类的公共方法
	public void getIn(){
		System.out.println("***********分割线*********");
		In in = new In();//外部类创建内部类对象,可以访问内部类的私有成员
		in.play();
		System.out.println("***********分割线*********");
	}
	
	//成员内部类,被private修饰,私有化。因此无法被外界访问
	private class In{
		public void play() {
			System.out.println("私有成员内部类普通方法");
		}
	}
	
	//内部类被static修饰-不常用!因为浪费内存
	static class In3{
		public void play() {
			System.out.println("静态内部类的普通方法");
		}
		static public void play1() {
			System.out.println("静态内部类的静态方法");
		}
	}
}

5.匿名内部类

package innerclass;
/**匿名内部类,通常结合着匿名对象一起使用*/
public class Test3 {
	public static void main(String[] args) {
		new Inner1() {
			
			//重写接口中的抽象方法
			@Override
			public void save() {
				System.out.println("Inner1的save()方法");
			}
			
			@Override
			public void copy() {
				System.out.println("Inner1的copy()方法");
			}
		}.copy();//匿名对象只能调用一个,且只能调用一次,即匿名对象只干一件事
		
		//匿名对象,必须重写所有抽象方法
		new Inner2() {
			
			@Override
			public void eat() {
                 System.out.println("撸个串去!!!");				
			}
		}.eat();
		Inner3 in3 = new Inner3();
		in3.game();
		in3.sleep();
	}

}
//创建接口
interface Inner1{
	void copy();
	void save();
}
//创建抽象类
abstract class Inner2{
	abstract public void eat();
	public void play() {
		System.out.println("抽象类的普通方法");
	}
}
//6.创建普通类
class Inner3{
	public void game() {
		System.out.println("玩什么游戏,赶紧学习!!!");
	}
	public void sleep() {
		System.out.println("不要睡啦,起来嗨");
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值