匿名內部類的使用


直接代碼

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM