zoukankan      html  css  js  c++  java
  • 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;
        }
    }

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

  • 相关阅读:
    Git-删除文件后找回-比较文件差异
    Python-异常处理-66
    Python-包-65
    Python-序列号和模块复习-64
    python入门第二十五天--反射 通过字符串的形式操作对象中的成员
    python入门第二十五天--异常处理
    python入门第二十四天----成员修饰符 类的特殊成员
    python入门第二十四天----类的成员之属性
    python入门第二十三天-----静态字段和静态方法
    pyqt5-day4
  • 原文地址:https://www.cnblogs.com/peiminer/p/13602757.html
Copyright © 2011-2022 走看看