首页 > 其他分享 >匿名内部类

匿名内部类

时间:2023-01-08 08:55:05浏览次数:36  
标签:swim 内部 void 匿名 new public

  • 匿名内部类尝试书写
package com.an.a;
//对匿名内部使用的测试
interface Swim{
    public abstract void swim();//抽象方法

}
public class TestA {
    public static void main(String[] args) {
        /*
        需要理解匿名内部类的格式而不是硬背:
        new 类名或接口名(){
          重写方法;
        };
         */
        new Swim(){
          public void swim(){
              System.out.println("重写了游泳的方法");
          }
        };
    }
}

关于匿名内部类书写格式的理解

以接口或抽象类的实现子类推导其匿名内部类的写法


对于匿名内部类的书写格式的理解可以 用javap反编译来加以验证
对于抽象类的匿名内部类也类似理解

匿名内部类的使用

package com.an.a;
//对匿名内部使用的测试
//抽象类
abstract class  Animal{
    public abstract void eat();
}
class Dog extends Animal{

    @Override
    public void eat() {
        System.out.println("小狗爱吃骨头");
    }
}

public class TestA {
    public static void main(String[] args) {
        /*
        需要理解匿名内部类的格式而不是硬背:
        new 类名或接口名(){
          重写方法;
        };
         */
        /*要在测试类中调用method方法
          该方法的参数为抽象类,则必须传递其实现子类的对象(接口也是同样的道理)
          但是如果我们的Dog类只要用一次,那么单独定义一个类那就太麻烦了
         */
        //方式一:直接传递其实现类的对象
        //Dog dog =new Dog();
        //method(dog);//小狗爱吃骨头
        //方式二:传递Animal的匿名内部子类的对象
        method(new Animal() {
            @Override
            public void eat() {
                System.out.println("小狗也爱吃肉");//小狗也爱吃肉
            }
        });
        //方法调用过程:传递其实现子类的对象,经过向上转型,父类调用eat调用重写后的eat
    }
    public static void method(Animal a){//Animal a=子类对象 多态
        a.eat();
    }
}

对于匿名内部类的拓展小点

package com.an.a;
//对匿名内部使用的测试
interface Swim{
    public abstract void   swim();
}

public class TestA {
    public static void main(String[] args) {
        /*
        需要理解匿名内部类的格式而不是硬背:
        new 类名或接口名(){
          重写方法;
        };
         */
        //理解点1:
        //写了一个实现了Swim的匿名内部子类
     //Swim s=  new Swim(){ //此时相当于向上转型

           //@Override
           //public void swim() {
             //  System.out.println("实现了游泳方法");
          // }
     //  };
    // s.swim();//父类调用被子类重写的方法
        //理解点2:
        new Swim() {
            @Override
            public void swim() {
                System.out.println("实现了游泳方法");
            }
        }.swim();//此时为一个匿名对象,可以调用自己的方法
    }

}

标签:swim,内部,void,匿名,new,public
From: https://www.cnblogs.com/swtaa/p/17033655.html

相关文章

  • Docker修改容器内部文件的方法
    Docker修改容器内部文件的方法一共有三种,下面进行一一介绍。1、进入容器内部修改使用下面的命令以命令行的形式可以进入容器的内部对文件进行修改。dockerexec-it容......
  • 在微服务内部,调用另一个微服务,如何保证事务的一致性
    虽然,我们通常建议涉及到事务的情况下,不要在一个微服务里,调用另外一个微服务,但有时也会遇到无法避开的情况,那我们就来看看应该如何保证事务的一致性。我们先来看看微服务A......
  • dremio 系统内部存储插件与自定义存储插件加载的区别
    dremio整体包含了两大类存储扩展,系统内部使用的,以及用户开发的,整体区别系统的目前是在dremio自己启动的时候就会注册以及使用的,比如加速反射的,home,元数据存储插件用......
  • JS精粹--匿名函数与自执行匿名函数
    1.函数也是一种类型要理解匿名函数,首先需要理解函数也是一种类型。所以函数可以赋值给变量,如下://将数字类型值赋给变量varnum=1;//将......
  • netcore 容器内部监听设置localhost 外部无法访问
    情况1  由于localhost只能够在容器内部访问,所以在设置的时候改为*号,而不是固定ip。情况2  也可能由于只配置了容器和宿主机的映射,容器内部未监听端口号导致情况3......
  • Java中解决lambda表达式内部访问在其外部定义的变量-使用mapToInt
    场景Java8新特性-Stream对集合进行操作的常用API:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/126070657上面介绍Stream的相关使用示例。如果遇到在lam......
  • 钉钉组织内部应用建立记录
    1.安装包参考链接pipinstallalibabacloud_dingtalk2.创建企业内部应用及机器人参考链接1.创建成功后,得到应用及机器人的相关应用凭证,用于后续接口取数.2.首......
  • ANE内部结构探究
    ​ 继上一篇​​创建一个简单ANE​​​后,今天在这里将我在开发ANE过程中的一些心得和大家分享一下。主要是悟出来的一些关于ANE内部结构的心得。同时也参考了ADOBE的文档​......
  • 内部类用法案例
    @Data@Accessors(chain=true)publicclassGetChangeBillListextendsReBase{privateChangeBillListDatadata;@Data@Accessors(chain=true)......
  • 解决内部pod解析不到外网问题
    问题描述:进入pod内发现只能ping通内部node和pod地址,baidu.com解析不到CoreDNS的ConfigMap重定向到文件内kubectlgetcm-nkube-systemcoredns-oyaml>Core......