一、内部类
1、 在类的内部又定义一个类,这个类称为内部类
2、内部类分为:静态内部类、实例内部类、局部内部类;
3、例如:
public class Text {
//在类中,用static修饰的类叫静态内部类
static class A{
}
//实例内部类
class B{
}
public void doSome(){
//在doSome方法中的类叫局部内部类
class C{
}
}
}
4、new内部类;必须先newText然后再new B
new Text().new A();
5、当doSome方法执行完毕,局部内部类C也就没了
6、外边的方法访问不了局部内部类
二、匿名内部类
1、匿名内部类是局部内部类的一种,因为没有类名,叫匿名内部类;
例如:不用匿名内部类
public class Text {
public static void main(String[] args) {
A a=new A();//创建A类对象
a.summ(new B(),100,200);//传递参数
}
}
//因为接口不能new对象,所以创建一个实现类
class B implements Jisuan{
public int sum(int a,int b){
return a+b;
}
}
//计算接口
interface Jisuan{
int sum(int a,int b);
}
class A{
//求和方法
public void summ(Jisuan c,int a,int b){
int Value=c.sum(a,b);//调用接口中的sum方法
System.out.println(a+"+"+b+"="+Value);
}
}
用匿名内部类:
public class Text {
public static void main(String[] args) {
A a=new A();//创建A类对象
//a.summ(new B(),100,200);
a.summ(new Jisuan() { //这个地方大括号就是匿名内部类,不需要写实现类,
public int sum(int a, int b) { //直接new接口后面写一个大括号,在大括号内写实现方法
return a+b;
}
}, 100, 200);//传递参数
}
}
//因为接口不能new对象,所以创建一个实现类
/*class B implements Jisuan{
public int sum(int a,int b){
return a+b;
}
}*/
//计算接口
interface Jisuan{
int sum(int a,int b);
}
class A{
//求和方法
public void summ(Jisuan c,int a,int b){
int Value=c.sum(a,b);//调用接口中的sum方法
System.out.println(a+"+"+b+"="+Value);
}
}
使用匿名内部类的缺点:复杂、乱、不好读、没有名字不好复用;