内部类
1.内部类的基本使用
package com.lu.day03;
public class Student {
private int b= 12;
public class A{
private int b = 11;
public void show(){
int b = 10;
System.out.println("我是A");
System.out.println(b);
System.out.println(this.b);
System.out.println(Student.this.b);
}
}
}
package com.lu.day03;
public class Test {
public static void main(String[] args) {
Student.A a = new Student().new A();
a.show();
}
}
使用特点一般将其私有化外部不允许使用
2.局部内部类
总结:鬼都不用,为了解决多继承问题后来有了接口就不用了
3.匿名内部类
作用:一般用在桌面编程(比如xmand,我的世界)
package com.lu.day03.test;
public class Test {
public static void main(String[] args) {
Sing s = new Sing() {
@Override
public void a(){
System.out.println("我是a");
}
public void b(){
System.out.println("我是b");
}
};
new Sing(){
@Override
public void a() {
System.out.println("我是a");
}
public void b(){
System.out.println("我是b");
}
};
}
}
想用到b方法必须在接口中有声明
Lamda表达式
package com.lu.day03.test;
public class Test1 {
public static void main(String[] args) {
Sing sing = () -> System.out.println("我是a");
sing.a();
Sing s = ()->{
System.out.println("我是a");
};
s.a();
}
}
使用规则:只能是接口而且接口中只能有一个方法
package com.lu.day03.test;
@FunctionalInterface//(只有一个抽象方法的接口叫做函数接口)
public interface Sing {
void a();
}
1.lambda省略模式
package com.lu.day03.test2;
/**
* lambda表达式省略模式
*/
public class Test {
public static void main(String[] args) {
//省略模式1参数类型可以省略,但要省略就全部省略
Sing sing = (a,b)->{
System.out.println("我会唱"+a+"还会唱"+b);
};
sing.sing("最后一页","荷塘月色");
//省略模式2参数只有一个小括号可以省略
Play p = name ->{
System.out.println(name);
};
p.play("王者");
//省略模式三方法体内如果只有一条语句可以省略大括号,如果有返回值必须xie return语句,如果return只有一句那么也可以省略
Add add = (a,b)->a+b;
System.out.println(add.add(2, 4));
}
}