匿名内部类(类没有名字):
1.内部类定义:
内部类:在类的内部又定义了一个新的类,被称为内部类
2.内部类的分类:
静态内部类:类似于静态变量
实例内部类:类似于实例变量
局部内部类:类似于局部变量
3.使用内部类编写的代码,可读性很差,能不用尽量不用。
4.匿名内部类是局部内部类的一种。因为这个类没有名字而得名,叫做匿名内部类。
5.学习匿名内部类主要是让大家以后在阅读别人代码的时候可以理解。并不代表以后都要这样写,因为有两个缺点
1.太复杂,太乱,可读性差
2.类没有名字,以后想重复使用不可以用
首先看两个代码如何引进匿名类:
public class Test01 { public static void main(String[] args) { //调用MyMath中的mySum方法 Mymath mm = new Mymath(); mm.mysum(new ComputerImpl(),100,200); } //静态变量 static String country; //该类在类的内部,所以称为内部类 //由于前面有static,所以称为"静态内部类" static class Inner{ } //该类在类的内部,所以称为内部类 //没有static叫做实力内部类 class Inner2{ } //方法 public void doSome(){ //局部变量 int i = 100; //该类在类的内部,所以称为内部类 //局部内部类 class Inner3{ } } public void doOther(){ //doSome()方法中的局部内部类,在doSome中不可以用 } } class Mymath{ //数学求和方法,Computer是一个引用类型可以看成 String c。这样好理解 public void mysum(Computer c, int x,int y){ int reValue = c.sum(x,y); System.out.println(x+"+"+y+"="+reValue); } } //实现接口里的方法 class ComputerImpl implements Computer{ public int sum(int a, int b) { return a + b; } }
public interface Computer { //抽象方法 int sum(int a, int b); }
看了上面的代码,看如何引进匿名类:
public class Test01 { public static void main(String[] args) { //调用MyMath中的mySum方法 Mymath mm = new Mymath(); //合并(这样写代码表示这个类是有的,类名是:ComputerImpl) //mm.mysum(new ComputerImpl(),100,200); //使用匿名内部类,表示这个ComputerImpl这个类没有名字 //这里表面上看上去是直接new 接口,实际上并不是接口可以new了,后面的{}大括号代表对接口的实现. mm.mysum(new Computer() { public int sum(int a, int b) { return a + b; } },100,200); } class Mymath{ //数学求和方法 public void mysum(Computer c, int x,int y){ int reValue = c.sum(x,y); System.out.println(x+"+"+y+"="+reValue); } } class ComputerImpl implements Computer{ public int sum(int a, int b) { return a + b; } }
一般不建议使用内部类:因为一个类没有名字,不可以重复使用,另外代码太乱,可读性太差