内部类
1,内部类:在类的内部又定义了一个新的类,被称为内部类
2,内部类的分类:
- 静态内部类:类似于静态变量
- 实例内部类:类似于实例变量
- 局部内部类:类似于局部变量
3,使用内部类编写的代码,可读性很差,尽量不使用
4,匿名内部类是局部内部类的一种,该类没有名字
5,学习匿名内部类的原因是因为方便以后阅读别人的代码,并不代表以后都要这样写。
class test{
//该类在类的内部,所以称为内部类
//静态内部类
static class Inner1{
}
//该类在类的内部,所以称为内部类
//实例内部类
class Inner2{
}
public void doSome(){
//该类在类的内部,所以称为内部类
//局部内部类
class Inner3{
}
}
public void doOther(){
//不能使用doSome()方法中的内部类
}
public static void main(String[] args){
//调用MyMath中的mySum方法
MyMath mm = new MyMath();
mm.mySum(new ComputeImp1(), 100, 200);
}
}
//负责计算的接口
interface Compute{
//抽象方法
int sum(int a, int b);
}
//你自动会在这里编写一个Compute接口的实现类
class ComputeImp1 implements Compute{
//对方法的实现
public int sum(int a, int b){
return a+b;
}
}
//数学类
class MyMath{
//数学求和
public void mySum(Compute o,int x, int y){
int retValue = o.sum(x,y);
System.out.println( x + "+" + y + "=" + retvalue);
}
}
其中
public static void main(String[] args){
//调用MyMath中的mySum方法
MyMath mm = new MyMath();
mm.mySum(new ComputeImp1(), 100, 200);
}
使用匿名内部类的话,改为
public static void main(String[] args){
//调用MyMath中的mySum方法
MyMath mm = new MyMath();
//使用匿名内部类,表示这个ComputeImp1这个类没名字了。
//这里表面看上去好像是接口可以直接new了,实际上并不是接口可以new了。
//后面的{}代表了对接口的实现。
//不建议使用匿名内部类,为什么?
//只能用一次,代码太乱,可读性太差
mm.mySum(new Compute(){
public int sum(int a, int b){
return a+b;
}
}, 100, 200);
}
同时无需编写接口的实现类。
不建议使用匿名内部类,只能用一次,代码太乱,可读性太差