首页 > 编程语言 >【Java基础】匿名内部类

【Java基础】匿名内部类

时间:2023-06-18 10:34:04浏览次数:35  
标签:Java 内部 show void public 匿名 num method

什么是匿名内部类

匿名内部类是 Java 编程语言中一种特殊的类,它没有显式地定义类名,而是在创建对象时通过传递实现了某个接口或继承了某个类的代码块来定义类。通常,我们使用它来简化代码、减少类的数量和更高效地编写事件处理程序等。


为什么要使用匿名内部类

在实际开发中,我们常常遇到这样的情况:一个接口/类的方法的某个实现方式在程序中只会执行一次,但为了使用它,我们需要创建它的实现类/子类去实现/重写。此时可以使用匿名内部类的方式,可以无需创建新的类,减少代码。


详细解释

不使用匿名内部类

比如下面的代码,定义了一个接口,接口里面有一个show方法


public interface Interface01 {

    void show();

}

 为了使用该接口的show方法,我们需要去创建一个实现类,同时书写show方法的具体实现方式


public class Interface01Impl implements Interface01{

    @Override

    public void show() {

        System.out.println("奋斗5天,期末考试我要过Java");

    }

}

在上面的代码中,实现类Interface01全程只使用一次,为了这一次的使用要去创建一个类,未免太过麻烦。那么我们可以使用匿名内部类。


使用匿名内部类

public static void main(String[] args) {

    Interface01 interface01 = new Interface01() {

        @Override

        public void show() {

            System.out.println("奋斗5天,期末考试我要过Java");

        }

    };

   //调用接口方法

   interface01.show();

}

书写匿名内部类的格式

方法一

这种方法和之前的多态基本上没有区别


new 接口/类名(参数1, 参数2...){

   实现方法1(){

       

   }

   实现方法2(){

       

   }

   ......

};

方法二  

new Thread(new Runnable() {

   @Override

   public void run() {

       System.out.println("奋斗5天,期末考试我要过Java");

   }

}).start();

匿名内部类的应用例子

题目1

       在程序的show()方法里面定义Father类的匿名子类,重写Father类的method()方法,并在合适的位置调用method()方法


abstract class Father {

   int num;

 

   public Father(int num) {

       this.num = num;

   }

 

   public abstract void method();

}

 

class Niming {

   public void show() {

       Father father = new Father(10) { // 定义 Father 类的匿名子类

           @Override

           public void method() { // 重写 Father 类的 method() 方法

               System.out.println("Father 类的匿名子类重写了 method() 方法");

               System.out.println("num 的值为:" + num);

           }

       };

       father.method(); // 在合适的位置调用 method() 方法

   }

}

 

public class InnerClasssDemo5 {

   public static void main(String[] args) {

       Niming niming = new Niming();

       niming.show();

   }

}

运行结果


Father 类的匿名子类重写了 method() 方法

num 的值为:10


方法二  

interface InterFace1 {

    int num = 100;

    void method();

}

  
class Niming2 {

    public void show() {

        InterFace1 interFace1 = new InterFace1() { // 定义实现了 InterFace1 接口的匿名内部类

            @Override

            public void method() { // 重写 InterFace1 接口中的 method() 方法

                System.out.println("InterFace1 接口的匿名内部类重写了 method() 方法");

                System.out.println("num 的值为:" + num);

            }

        };

       interFace1.method(); // 在合适的位置调用 method() 方法

   }

}

 

public class InnerClassDemo6 {

   public static void main(String[] args) {

       Niming2 niming2 = new Niming2();

       niming2.show();

   }

}


标签:Java,内部,show,void,public,匿名,num,method
From: https://blog.51cto.com/u_16092964/6507549

相关文章

  • 【技术积累】Java中的集合框架【一】
    什么是Java集合框架?Java集合框架是Java编程语言中提供的一组接口、实现和算法,用于存储和操作数据集合。集合框架可以让程序员更加高效地组织和操作数据,而无需手动实现底层数据结构。Java集合框架的优点是:提供了丰富、灵活的数据结构和算法,让程序员可以更加高效地完成各种数据......
  • Python - Java vs Python对比
     工具类最大堆,最小堆Java-PriorityQueue<T>https://www.cnblogs.com/frankcui/p/12125210.html#_label23 Python- heapq库https://blog.csdn.net/wangws_sb/article/details/124108070 注意:python中的heapq库只有最小堆,没有最大堆,当使用最大堆时,可以在插入元素时......
  • java 如何实现控制台打印sql语句
    springboot项目打印sql语句2019.9.27首先我们看一下效果现在直接上代码:logback-spring.xml文件<configuration><!--%m输出的信息,%p日志级别,%t线程名,%d日期,%c类的全名,%i索引【从数字0开始递增】,,,--><!--appender是configuration的子节点,是负责......
  • java web模板学习
    经过建民老师几次测验我发现我是真写不完那个web系统项目,然后如果真的打分的话,不会很高。所以接下来时间我要学习一些javaweb模板。这个模板吧主要是基于springboot的系统模板。我学习一下,等下次测验就可以快点。......
  • Java_Base1之idea的使用
    准备工作:1、编码集file->settings->Editor->Fileencodingsprojectencodingutf-8Defaultencodingforpropertiesfilesutf-8并勾上后面2、jdkfile->projectstructure->project->projectsdk填写自己的jdk路径3、字体file->settings->Editor......
  • Java 注释及Dos命令
    Java注释、绝对路径、相对路径、基本Dos命令1.Java的三种注释方式注释能增加代码的可读性,习惯写注释能提升我们编写代码的能力单行注释:用//注释一些代码提示多行注释:以/*为开头以*/为结束文档注释:/**@authorxxx*@version1.0*/用javadoc来生成文本注释,javadoc......
  • Java_Base7之接口和抽象类、集合类ArrayList、HashSet、HashMap
    一、接口和抽象类(了解)接口:规则,规范行为。只能有抽象方法,一个类可以同时实现多个接口,必须重写所有抽象方法。 接口与接口是继承,接口与类是实现。接口是对继承的补充。 interfaceimplements定义一个接口publicinterfaceInter{ //默认修饰符publicabstract可以省略 pu......
  • Java_Base4之多态、api使用、字符串方法学习
    一、多态Polymorphism少写代码概念:用父类的类型来接收子类的对象先决条件: 继承/接口实现 父类类型接收子类对象 //实现扩展性优点: 扩展性强,解决了代码复用,降低类型耦合度 可以少定义变量,少些重复代码。 案例:一个方法接受不同的子类类型。缺点: 不能使用子类特有方法 ......
  • Java-抽象与接口
    在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。......
  • 代码随想录Day24|回溯算法+JAVA大作战
     今日任务39. 组合总和40.组合总和II131.分割回文串 93.复原IP地址  78.子集   90.子集II   39.组合总和classSolution{List<List<Integer>>ans=newArrayList<>();LinkedList<Integer>now_ans=newLinkedList<>();publicLi......