java学习笔记--基础知识--内部类---匿名内部类

本文深入探讨Java中内部类的构造与使用方式,包括无参构造函数和有参构造函数的应用场景。通过具体示例,展示了如何创建内部类实例,并实现接口或继承类,以及在不同情况下内部类如何访问外部类的成员。

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

内部类使用无参构造函数:

interface  MyInterface{
	
	void showMe();
}

public class Outer {
	
	private String name = "DASHA";
	
	public MyInterface getInner(){
		
		String text = "We are ";
		
		//这里,创建内部类实例时,调用的无参构造函数
		return new MyInterface(){ //之后的代码是实现了MyInterface这个接口

			@Override
			public void showMe() {
				System.out.println(text + name);
				
			}
			
		}; //这个分号是必须的哟
    }
	
	
	public static void main(String[] args){
		
		MyInterface mi = new Outer().getInner(); //这里需要注意的是就是传入的是false,inner类也会被编译出来
		
		mi.showMe();

	}

}

内部类使用有参构造函数:

要使用有参构造函数,那么内部类只能是继承另一个类,而不是实现一个接口,因为匿名类没名字,我们无法在内部类中定义一个的构造函数


class  BaseClass{
	
	private String name;
	
	public BaseClass(String name){
		this.name = name;
	}
	
	public BaseClass(){
		this.name = "PIG";
	}
	
	void showMe(){
		System.out.println("My name is " + name);
	}
}

public class Outer {
	
	public BaseClass getInner(String name){
		
		//可能是版本问题吧,我只有在内部类中没对name进行写操作,就不用final去修饰name。 
		//但是,如果出现写操作,就是提示name必须要用final修饰
		
		//这里,创建内部类实例时,调用的有参构造函数
		return new BaseClass(name){ //之后的代码是扩展BaseClass
			
			private String myName;
			{
				//虽然我们无法为匿名类写一个构造函数,但是我们可以在这里初始化它的属性
				myName = "DA XIAN";
			}
			
			void test(){
				System.out.println(myName);
			}

			
		}; //这个分号是必须的哟
    }
	
	
	public static void main(String[] args){
		
		BaseClass mi = new Outer().getInner("Simon");
		
		mi.showMe();
		
		//无法调用test,因为返回的内部类已经被转换成 BaseClass类型了。
		//mi.test();

	}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值