匿名内部类:适合创建只需要使用一次的类,如果需要重复使用,将实现类定义成一个独立的类
new 实现接口(){
匿名内部类的类体部分
}
例子
接口:
public interface A {
void test();
}
主函数:
public class niming {
public static void main(String args[]){
int age=8;
A a=new A(){
public void test(){
System.out.println(age);
}
};
a.test();
}
}
Lambda表达式:主要作用代替匿名内部类的繁琐语法
Eatable接口
interface Eatable {
void taste();
}
Flyable接口
public interface Flyable {
void fly(String weather);
}
Addable接口
public interface AddAble {
int add(int a,int b);
}
主类:
public class Lamna {
public void eat(Eatable eatable){
System.out.println(eatable);
eatable.taste();
}
public void drive(Flyable f){
System.out.println("我在驾驶:"+f);
f.fly("天气晴朗");
}
public void test(AddAble addAble){
System.out.println("2与3的和是"+addAble.add(2,3));
}
public static void main(String args[]){
Lamna lamna=new Lamna();
//lambad表达式
lamna.eat(()-> System.out.println("吃东西"));
//匿名内部类
Eatable eatable=new Eatable() {
@Override
public void taste() {
System.out.println("吃东西2");
}
};
lamna.eat(eatable);
//带一个参数的lambda表达式
lamna.drive(weather->{
System.out.print("今天的天气"+weather);
System.out.println("直升机飞行平稳");
});
//匿名内部类
Flyable flyable=new Flyable() {
@Override
public void fly(String weather) {
System.out.print("今天的天气2"+weather);
System.out.println("直升机飞行平稳2");
}
};
lamna.drive(flyable);
//带两个参数的lambda表达式
lamna.test((a,b)->a+b);
//匿名内部类
AddAble addAble=new AddAble() {
@Override
public int add(int a, int b) {
return a+b;
}
};
lamna.test(addAble);
}
}
带一个参数的那个 没太懂参数的传递问题?
运行结果:
javajiangyi.Lamna$$Lambda$1/1023892928@7cca494b
吃东西
javajiangyi.Lamna$1@7ba4f24f
吃东西2
我在驾驶:javajiangyi.Lamna$$Lambda$2/1989780873@58372a00
今天的天气天气晴朗直升机飞行平稳
我在驾驶:javajiangyi.Lamna$2@4dd8dc3
今天的天气天气晴朗直升机飞行平稳2
2与3的和是5
2与3的和是5