内部类(静态—成员—局部—匿名)

静态内部类(可以用访问控制权限的修饰符修饰)

可以等同看做静态变量

可以访问外部类中私有的数据(作用)

静态内部类可以直接访问外部类的静态数据,无法直接访问成员 

public class Demo18 {
	private static String a = "aqs";
	private String b = "111";
	private static void m1() {
		System.out.println("静态方法执行");
	}
	private void m2() {
		System.out.println("成员方法执行");
	}
	
	static class innerclass{//静态内部类
		public static void m3() { 
			System.out.println(a);
			//System.out.println(b);不可以访问
			m1();
			//m2();
			
		}
		public void m4() {
			System.out.println(a);
			//System.out.println(b);不可以访问
			m1();
			//m2();
		}
	}
	public static void main(String[] args) {
		Demo18.innerclass.m3();//外部类.内部类.方法
		
	   	innerclass inner = new Demo18.innerclass();//执行m4()
	    inner.m4();
	}
}

成员内部类

可以等同看做成员变量

成员内部类中不能有静态声明

成员内部类可以访问外部类所有的数据

public class Demo18 {
	private static String a = "aqs";
	private String b = "111";
	private  static void m1() {
		System.out.println("静态方法执行");
	}
	private void m2() {
		System.out.println("成员方法执行");
	}
	
	 class innerclass{//成员内部类
		public  void m3() { 
			System.out.println(a);
			System.out.println(b);
			m1();
		m2();
			
		}
		public void m4() {
			System.out.println(a);
			System.out.println(b);
			m1();
			m2();
		}
	}
	public static void main(String[] args) {
		Demo18 dc = new Demo18();//创建外部类对象
		innerclass inner = dc.new innerclass();
		inner.m4();
		}
}

 

局部内部类等同于局部变量

不能用访问控制权限符修饰(只在方法里有效)

不能有静态声明 

在局部内部类中访问局部变量的时候必须final修饰局部变量

public class Demo19 {
	
	public void m1() {
		final int i = 10;
		
		class innerclass{//局部内部类
			public void m2() {//成员方法
				System.out.println(i);
			}
		}
	//调用
		innerclass inner =  new innerclass();
		inner.m2();
	}
	public static void main(String[] args) {
		Demo19 dc = new Demo19();
		dc.m1();
	}
}

匿名内部类

指的是类没有名字

优点,少定义一个类

缺点,不能重复利用

public class Demo20 {
	public static void test (CustomerService cs) {
		cs.logout();
	}
	public static void main(String[] args) {
		//调用test方法
		//test(new CustomerServiceIMPL());
		
		//使用匿名内部类
		test(new CustomerService(){

			@Override
			public void logout() {//实现接口中的方法
				// TODO Auto-generated method stub
				System.out.println("退出系统");
			}});
	}
}
interface CustomerService{
//接口	
	void logout();
}
/*class CustomerServiceIMPL implements CustomerService{
	public void logout() {
		System.out.println("系统已经退出");
	}
}*///有了匿名内部类不再需要写这个了

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值