java非静态内部类如何创建对象实例

java非静态内部类如何创建对象实例:

public class A {

    public class NestA {

    }
}

在A的外部创建NestA的方法如下

A a = new A();
A.NestA nestA = a.new NestA();

 

接下来我们通过实际的项目经历给大家讲解一下在外部创建内部非静态类实例的应用场景——单元测试

刚刚结束一个新开发项目,项目开发中推动团队成员使用单元测试开发,其中一个同事不知道怎样给内部非静态类做单元测试。在单元测试时他也不知道如何给非静态内部类new对象实例,开始我也挺惊讶的毕竟自己很早以前就知道了,平常也不是死磕语法糖的习惯,最后从如何给非静态内部类创建对象开始指导单元测试。考虑到该同事在平常开发能力很好,可能非静态内部类创建对象确实比较偏门,所以也写一篇博客介绍一下

 

首先我们创建一个动物类Animal

package com.penny.javademo;

    
public class Animal {

    private final String name;

    public Animal(String name) {
        this.name = name;
    }
}

 

动物总会运动,所以我们就给动物顶一个运动接口Motion,其中有水生、有陆地、有空中的

运动接口:

// 动物的活动方式
public interface Motion {
   public void action();
}

所有动物都是有对应的运动模式

// 水中活动是游泳
public class Swimming implements Motion {
    @Override
    public void action() {
        System.out.println(name + " swimming");
    }
}

// 空中活动的飞
public class Flying implements Motion {
    @Override
    public void action() {
        System.out.println(name + " flying");
    }
}

// 陆地活动的走、跑
public class Run implements Motion {
    @Override
    public void action() {
        System.out.println(name + " walk or run");
    }
}

整个类的如下:

Animal.java

package com.penny.javademo;

public class Animal {

    private final String name;

    public Animal(String name) {
        this.name = name;
    }

    // 水中活动是游泳
    public class Swimming implements Motion {
        @Override
        public void action() {
            System.out.println(name + " swimming");
        }
    }

    // 空中活动的飞
    public class Flying implements Motion {
        @Override
        public void action() {
            System.out.println(name + " flying");
        }
    }

    // 陆地活动的走、跑
    public class Run implements Motion {
        @Override
        public void action() {
            System.out.println(name + " walk or run");
        }
    }

    // 动物的活动方式
    public interface Motion {
        public void action();
    }
}

测试用例AnimalTest.java

import com.penny.javademo.Animal;

import org.junit.Test;

public class AnimalTest {

    @Test
    public void testInnerClass() {
        System.out.println("testInnerClass...");
        Animal animal = new Animal("dolphin");
        Animal.Swimming swimming = animal.new Swimming();
        swimming.action();
    }
}

测试输出结果

testInnerClass...

dolphin swimming

上面我们进行了海豚Animal实例然后在外部指定海豚的行动游泳,单独对游泳内部类进行测试。

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值