内部类和匿名内部类

内部类和匿名内部类

监听器类、线程,经常使用(也许你经常用,但是你不知道他们是什么)

内部类

什么是内部类?

(定义在类里面的类)

内部类使用方法?

一个最简单的内部类

class A{
	class B{
		
	}
}


内部类编译后,多出的文件


比别人多了一个A$B.class

生成内部类对象的方法?

class A{
	int i;
	class B{
		int j;
		int funB(){
			int result = i + j;
			//完整写法 int result = A.this.i = this.j;(这两个this也是不一样的,一个是A的,一个是B的)
			//总之记住:内部类可以随意使用外部类的变量
			return result;
		}
	}
}

内部类和继承是没有任何关系的,B是A的内部类,B可以使用A中的成员变量,但是B并不是继承了A

class Test{
	public static void main(String args []){
		A a = new A();
		
		A.B b = a.new B();	
		
		a.i = 3;
		b.j = 1;
		int result = b.funB();
		System.out.println(result);
		
		
		A.B b2 = new A().new B();		
		
	}
}

匿名内部类

interface A{
	public void doSomething();
}

class B{
	public void fun(A a){
		System.out.println("B类的fun函数");
		a.doSomething();//A类型的参数,当然可以用a的方法
	}
}

class AImpl implements A{
	public void doSomething(){
		System.out.println("AImpl doSomething");
	}
}

class Test{
	public static void main(String args []){
		AImpl ai = new AImpl();
		A a = ai;//向上转型
		B b = new B();
		b.fun(a);
	}
}

运行结果



匿名内部类写法

A接口是不能够new的。但是后面有了{}之后。神奇的事情发生了,请看下面写法。

new A(){......}  

名字解释:显示没有名字,然后在Test里面,又是内部类,然后就叫做:匿名内部类

这种写法意义:就是实现(implements)接口A,并重写方法;

new A(){......}就是实现了接口A并向上转型的参数;【如果不懂,请参看对比:上面Test.java+AImpl.java <----------> 下面Test.java写法】

class Test{
	public static void main(String args []){
		// AImpl ai = new AImpl();
		// A a = ai;//向上转型
				
		B b = new B();
		// b.fun(a);
		//匿名内部类写法:有点像写button监听方法的样子
		b.fun(new A(){
			public void doSomething(){
				System.out.println("匿名内部类");
			}
		});
	}
}



如果看了上面,你还不懂啊?看视屏。讲师说得真心不错诶。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一休日记

csdn打赏扣费20点,这

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值