内部类

内部类

含义:类中定义类。
分类:
  1.成员内部类
  2.私有内部类
  3静态内部类
  4.局部内部类
  5.匿名内部类
其中匿名内部类我们用的最多。
1.成员内部类:内部类定义在外部类的成员位置。
  可以使用成员修饰符,public……static……
2.私有内部类:被private修饰的内部类。
  私有内部类只能在当前的类中使用。
3.静态内部类:被static修饰的内部类。
  1.静态内部类中可以定义静态的内容。
  2.静态类不能直接调用外部类的成员,要创建外部类的对象。
4.局部内部类:内部类定义在局部的位置。
  1.不可以使用成员修饰符public……static……修饰(final不是成员修饰符)。
  2.只能在所定义的方法中使用。
  3.如果定义的内部类中的方法有参数,此参数必须被final修饰,jdk1.7之前必须显示定义,1.8之后可省略,默认被final修饰。

public class Demo{
	//成员内部类
	public class A{
	}
	//私有内部类
	private class B{
	}
	//静态内部类
	static class C{
	}
	//成员方法
	public void test(){
		//局部内部类
		class D{
		}
	}
}

5.匿名内部类:
  当一些类没有自己的作用,只是对有些方法进行重写,可以简略的使用匿名内部类的形式。

public class Demo02 {
	public static void main(String[] args) {
		//new Test().smoke();
		//匿名内部类  new的是实现类的对象
		//直接调用 只能使用一次,不能复用
		new Smoking(){//实现类的类体|子类的类体-->继承|实现了 前面的接口|父类  eg:Smoking
			@Override
			public void smoke() {
				System.out.println("不会吐烟圈的吸烟人都是辣鸡!!!");
			}
		}..smoke();
		//引用调用   接口多态
		Smoking s=new Smoking(){
			@Override
			public void smoke() {
				System.out.println("不会吐烟圈的吸烟人都是辣鸡!!!");
			}
		};
		s.smoke();
	}
}
//定义接口
interface Smoking{
	 void smoke();
}

jdk1.8之后为了防止过多的内部类使得代码反锁,有了Lambda表达式,可以简化内部类。
Lambda表达式使用前提:
  必须是函数式接口(只有一个抽象方法的接口)。
  @FunctionalInterface强制检查是否为一个函数式接口
Lambda表达式基本格式:
  () - > {}
  ():方法参数列表
  -> 箭头函数|箭头符号 上下文推导
  {} 抽象方法的方法体

public class LambdaDemo {
	public static void main(String[] args) {
		//匿名内部类的一般使用
		/*Swimming s=new Swimming(){
			@Override
			public void swim() {
				System.out.println("淹死会水的...");	
			}
		};
		s.swim();
		*/
		//Lambda表达式语法1 
		//Swimming s=()->{System.out.println("淹死会水的...");};
		//语法2 如果语句体只有一句,前后的{}是可以省略的
		//Swimming s=()->System.out.println("淹死会水的...");
		//语法3 如果存在方法的参数,()中的参数数据类型可以省略
		//Swimming s=(x)->System.out.println("淹死会水的...");
		//语法4  如果存在方法的参数,()中的参数有1个,参数的()可以省略,参数有多个不可以省略
		//Swimming s= x ->System.out.println("淹死会水的...");
		//语法5 如果语句体只有一句,并且是一个return 返回值语句,return与语句体{}可以一起省略
		Swimming s= x -> x+10;
		System.out.println(s.swim(5));
	}
//函数式接口
@FunctionalInterface
interface Swimming{
	int swim(int x);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值