• 匿名内部类的使用


    直接代码

    package com.fang.java.javabase.innerclass;
    
    import java.util.jar.Attributes.Name;
    
    import lombok.Data;
    import lombok.extern.slf4j.Slf4j;
    
    @Slf4j
    @Data
    public class AnonymousClasses {
        Animal outan;
    
        interface HelloWorld {
            void greet();
    
            void greetsomeone(String someone);
        }
    
        // 内部类
        class Animal {
            public String name="default";
            public Animal() {
    
            }
            public Animal(String name) {
                this.name = name;
            }
    
            public void printName() {
                log.info("Animal:" +this.name);
            }
            public String getName(){
                return name;
            }
    
    
        }
    
        public void outFun() {
            log.info("out function");
    
        }
    
        //匿名类通过外部的调用外部的变量
        public Animal getAni(final String args) {
            return new Animal() {
                public void printName() {
                    outFun();
                    log.info("Animal:" + args);
                }
    
            };
        }
        //通过实例初始化来调用外部的局部变量
        public Animal getAni2(String args) {
            return new Animal(args) {
                public void printName() {
                    outFun();
                    //log.info("Animal:" + getName());如果nane是private
                    log.info("Animal:" + name);
                }
    
            };
        }
    
        public static void main(String[] args) {
            AnonymousClasses ac = new AnonymousClasses();
            HelloWorld helloWorld = new HelloWorld() {
                private String input;
    
                @Override
                public void greetsomeone(String someone) {
                    log.info("hello " + someone);
                }
    
                @Override
                public void greet() {
                    log.info("hello world" );
                }
            };
            //接口的匿名内部类实现
            helloWorld.greet();
            helloWorld.greetsomeone("jack");
    
            //类的匿名内部类的实现
            ac.getAni("buguliao").printName();;
    
            ac.getAni2("xiaoji").printName();
    
            //内部类的调用方式
            ac.new Animal("da e"){
                public void printName() {
                    log.info("Animal:"+name);
                }
            }.printName();
        }
    }
    
  • 相关阅读:
    数值拓展与函数拓展
    正则小记
    Struts2(三)配置详解
    Struts2(二)工作原理
    Struts2(一)基本配置
    Eclipse新建动态web工程项目出现红叉解决方案
    Spring系列之AOP
    Java动态代理的实现机制
    Spring系列之装配Bean
    Spring系列之基本配置
  • 原文地址:https://www.cnblogs.com/JuncaiF/p/11153352.html
Copyright © 2020-2023  润新知