内部类

内部类

内部类(innerClass),表示的是在一个类的定义中允许出现其他类的声明,这些其他类通常称之为内部类(或:寄生类,类属类),内部类可以访问外部类中的成员(属性,方法),内部类提供了比方法更为强大的封装特性;Java中的内部类分为以下几种:

  • 成员内部类
  • 局部内部类
  • 静态内部类
  • 匿名内部类
成员内部类

成员内部类的权限类似于成员变量,是在类结构的最顶层定义,跟全局变量,方法属于一个访问级别

public class InnerClass {
	
	//成员内部类
	class OtherClass{
		public void m2(){
			System.out.println("成员内部类的方法");
		}
	}
	
	public void m1(){
		System.out.println("外部类的方法");
	}
	
	public static void main(String[] args) {
        //调用内部类方法时必须先创建外部类对象
		new InnerClass().new OtherClass().m2();
	}

}
局部内部类

java中的内部类还能在构造器,普通方法,语句块中定义,这些内部类称之为局部内部类,局部内部类的使用范围只能在声明区域,局部内部类不能使用访问修饰符修饰,因为在方法级别已经定义的访问权限

public class OutterClass {
	
	public void m(){
		
		class InnerClass2{
			public void m2(){
				System.out.println("内部类方法");
			}
		}
		
		InnerClass2 ic = new InnerClass2();
		ic.m2();
	}
	
	public void n(){
		//局部内部类只能在定义范围使用
//		new InnerClass2();
	}
	
	
	public static void main(String[] args) {
		//局部内部类只能在定义范围使用
//		new OutterClass().new InnerClass2();
	}
	
}
静态内部类

另外java中还提供了静态内部类,在将成员内部类使用static修饰,从而使得在外界需要使用当前类的内部类时,只需要通过外部类的名称.内部类即可访问。

public class OutterClass2 {

	//静态内部类
	static class InnerClass2{
		public void m(){
			System.out.println("静态内部类的方法。。");
		}
	}
	
	public void m1(){
		new InnerClass2().m();
	}
	
	public static void main(String[] args) {
		OutterClass2.InnerClass2 oi = new OutterClass2.InnerClass2();
		oi.m();
	}
}
匿名内部类

匿名内部类,顾名思义就是没有名字的内部类,所在在使用时一般只能使用一次,匿名内部类的作用简化代码的编写。

Button.java
public class Button {

	private String text;
	private int width;
	private int height;
	private int x;
	private int y;
	
	// setter/getter
	
	/**按钮的点击事件监听*/
	public void setOnClickListener(OnClickListener lis){
		lis.click();
	}
	
	/**监听事件接口*/
	interface OnClickListener{
		void click();
	}
}
TestButton.java
public class TestButton {

	public static void main(String[] args) {
		
		Button btn = new Button();
        //匿名内部类
		btn.setOnClickListener(new Button.OnClickListener(){
			@Override
			public void click() {
				System.out.println("hello");
			}
		});
		
		//简化写法(lambda表达式)
		btn.setOnClickListener(()->{System.out.println("hello");});
		
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值