lambda和匿名内部类

接口与类相似点:

  • 一个接口可以有多个方法。
  • 接口文件保存在 .java 结尾的文件中,文件名使用接口名。
  • 接口的字节码文件保存在 .class 结尾的文件中。
  • 接口相应的字节码文件必须在与包名称相匹配的目录结构中。

接口与类的区别:

  • 接口不能用于实例化对象。
  • 接口没有构造方法。
  • 接口中所有的方法必须是抽象方法。
  • 接口不能包含成员变量,除了 static 和 final 变量。
  • 接口不是被类继承了,而是要被类实现。
  • 接口支持多继承

接口特性

  • 接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为 public - abstract(只能是 public abstract,其他修饰符都会报错)。
  • 接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量(并且只能是 public,用 private 修饰会报编译错误)。
  • 接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法。

代码示例:

interface IEat{
	public void eat(String thing);
}

interface IRun {
	public void  run() ;
}

interface ISay{
	public String say(String thing);
}

interface ISing{
	public void sing(final String thing);
}

interface IDog extends IEat,IRun{
	
}

class Cat implements IEat{
	public void eat(String thing) {
		System.out.println("I am eating "+thing);
	}
}

class Dog implements IDog,ISay{
	public void  run() {
		System.out.println("I am running...");
	} 
	public void eat(String thing) {
		System.out.println("I am eating "+thing);
	}
	public String say(String thing) {
		System.out.println("I am saying "+thing);
		return thing;
	}
}
测试代码
public class LambdaTest {
	public static void main(String args[]) {
		//实现接口
		Cat c=new Cat();
		c.eat("food");
		
		//匿名内部类
		IEat c1=new IEat() {
			public void eat(String thing) {
				System.out.println("I am eating "+thing);
			}
		};
		c1.eat("fish");
		
		/*
		 * lambda表达式
		 * 格式:(参数)->{语句};
		 * */
		//不带参数,无返回值
		IRun c2=()->System.out.println("run");
		c2.run();
		
		//带参数,无返回值
		IEat c3=(thing)->System.out.println("eat "+thing);
		c3.eat("apple");
		
		//带参数,有返回值
		ISay c4=(thing)->{
			System.out.println("say "+thing);
			return thing;
		};
		c4.say("good night");
		
		//参数中有final修饰时
		ISing c5=(thing)->System.out.println("sing "+thing);
		c5.sing("小苹果");
		
	}
}
测试结果

I am eating food
I am eating fish
run
eat apple
say good night
sing 小苹果

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值