java之匿名类

匿名内部类(类没有名字):

  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;
    }
}

一般不建议使用内部类:因为一个类没有名字,不可以重复使用,另外代码太乱,可读性太差

原文地址:https://www.cnblogs.com/peiminer/p/13602757.html