美文网首页
每日一点(1)

每日一点(1)

作者: _River_ | 来源:发表于2020-12-05 22:06 被阅读0次

匿名类 内部类 匿名内部类


匿名类(可以是接口 抽象类 普通类):
1:无需创建对象
2:直接重写方法


new Anonymous(){
    @Override
    public void anonymousMethod(){
    System.out.println("我是匿名类");
    }
}.anonymousMethod();

内部类:若一个事物里面包含其他事物可以用这种结构
内部类可以直接访问外部类的成员,但外部类访问内部类必须建立内部类对象。


public class InnerTest {
    public static void main(String[] args) {
    // 创建外部类对象
    OutPerson outPerson = new OutPerson();
    // 创建内部类对象
    OutPerson.InnerHeart innerHeart = outPerson.new InnerHeart();
    // 调用内部类方法
    innerHeart.heartMethod();
    // 调用外部类方法
    outPerson.setLive(false);
    // 调用内部类方法
    innerHeart.heartMethod();
    }
}

class OutPerson {
    private boolean live = true;
    class InnerHeart {
        public void heartMethod() {
        // 直接访问外部类成员
            if (isLive()) {
                System.out.println("心脏在跳动");
            } else {
                System.out.println("心脏不跳了");
        }
    }
}
    public boolean isLive() {
        return live;
    }
    public void setLive(boolean live) {
        this.live = live;
    }
}

匿名内部类:匿名类与内部类的结合
应用场景减少重复代码,我们并不能把一段代码抽取成参数,但我们可以把他抽取一个类;
这样子就可以做到每次都重写变化逻辑 而 固定逻辑不动


//作为内部类
public interface AnonymousInnerClassExtraMethod {
  public void otherMethod();
}

public class AnonymousInnerClass {

  public static void main(String[] args) {

    //内部类 作为 外部类的入参
    AnonymousInnerClassExtraMethod anonymousInnerClassExtraMethod = new AnonymousInnerClassExtraMethod() {
        @Override
        public void otherMethod() {
            System.out.println("变化逻辑");
        }
    };
    parentMethod(anonymousInnerClassExtraMethod);

    //使用匿名内部类的方式简化
    parentMethod(new AnonymousInnerClassExtraMethod() {
        @Override
        public void otherMethod() {
            System.out.println("变化逻辑");
        }
    });

    //lambda表达式的简化:只能用于只有一个抽象方法的接口 会直接把该逻辑替换进去
    parentMethod(() -> {
        System.out.println("变化逻辑");
        });
    }

    //内部类 作为 外部类的入参
    public static void parentMethod(AnonymousInnerClassExtraMethod anonymousInnerClassExtraMethod) {
    System.out.println("开始 其他固定逻辑");
    //执行变化的业务逻辑
    anonymousInnerClassExtraMethod.otherMethod();
    System.out.println("最后 其他固定逻辑");
  }
}

相关文章

  • 每日一点(1)

    匿名类 内部类 匿名内部类 匿名类(可以是接口 抽象类 普通类):1:无需创建对象2:直接重写方法 内部类:若一...

  • 为什么要写日精进?

    吴金彬每日精进20200926(1/100) 9分 每日金句:每天进步一点点,距离成功便不远! 如果失败打不到你,...

  • 榆木每日三目标 D41

    1.每日60S 2.每日练字 3.每日阅读 今日才真正把上周书单的书读完,对于其中一点很是认可,也适用于工作生活的...

  • 59号yuki婷#百日营#6.27打卡

    1.每日步行5000步:差一点 2.每日存钱50元+记账 3.forest 专注120分钟 4.《小白理财》阅读了...

  • 手绘打卡

    每日打卡 迟了一点

  • 榆木每日三目标 D95

    1.每日60S 2.每日练字 3.每日阅读 将目标进行分解,一步一个脚印,每天比过去的自己进步一点,坚持不懈,就会...

  • 第一个100km🏃‍♀️ | Day 102

    ❤ 01、每日收获 1、每日金句: a、生命里那些让你过不去的境遇,都是让你成长蜕变的养分。 b、哪里有什么一点都...

  • 习惯养成记(38)

    1:每日早起时间: 6点以前 5点20分✔ 致自己:看不清未来时,就比别人坚持久一点。 2:每日心语签: 只有承担...

  • 读书手抄45天

    每日小结 1日更5000字。 2读心安即是归处171-202。 3小挣一点。

  • 我是黃小廚,2018.我們一起極致踐行!

    2018.09.09每日分享 1.忙于工作,日渐消瘦。 2.先低头不代表就是自己做错了。 3.多一点的关爱,多一点...

网友评论

      本文标题:每日一点(1)

      本文链接:https://www.haomeiwen.com/subject/lernwktx.html