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 {@Overridepublic void action() {System.out.println(name + " swimming");}
}// 空中活动的飞
public class Flying implements Motion {@Overridepublic void action() {System.out.println(name + " flying");}
}// 陆地活动的走、跑
public class Run implements Motion {@Overridepublic 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 {@Overridepublic void action() {System.out.println(name + " swimming");}}// 空中活动的飞public class Flying implements Motion {@Overridepublic void action() {System.out.println(name + " flying");}}// 陆地活动的走、跑public class Run implements Motion {@Overridepublic 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 {@Testpublic void testInnerClass() {System.out.println("testInnerClass...");Animal animal = new Animal("dolphin");Animal.Swimming swimming = animal.new Swimming();swimming.action();}
}

测试输出结果

testInnerClass...

dolphin swimming

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

java非静态内部类如何创建对象实例相关推荐

  1. Java 静态内部类与非静态内部类【复习】

    一.静态内部类与非静态内部类的区别 1.静态内部类只能访问外部类的静态成员和方法 2.静态内部类不能访问外部类的非静态成员变量和非静态方法.他只 能访问外部类的静态成员和静态方法,非静态内部类能够访问 ...

  2. java静态类和非静态类_关于java:静态和非静态内部类的区别?

    我正在阅读有效的Java 2 -项目22,它在标题中写道: "Favor static member classes over non-static" 但是在这一章的结尾 Impl ...

  3. java 反射内部匿名内部类_android-反射的使用(反射静态内部类、非静态内部类、匿名内部类等)...

    直接上代码 com.**.routerdemo 替换成包名 import java.lang.reflect.Constructor; import java.lang.reflect.Field; ...

  4. JAVA静态和非静态内部类

    JAVA静态和非静态内部类 一直对java的静态和非静态内部类的东东理解不清楚,今天测试了一下,下面把测试结果记录一下,加深印象.用于以后查找.  直接上代码. Java代码  package com ...

  5. java 反射静态内部类_android-反射的使用(反射静态内部类、非静态内部类、匿名内部类等)...

    直接上代码 com.**.routerdemo 替换成包名 import java.lang.reflect.Constructor; import java.lang.reflect.Field; ...

  6. java避免内存泄露_Java防止非静态内部类内存泄漏

    内存泄漏 一个不会被使用的对象,因为另一个正在使用的对象持有该对象的引用,导致它不能正常被回收,而停留在堆内存中,从而导致内存泄漏. 最坏的情况下,由于大量的内存泄漏,最终导致jvm的内存耗尽,致使程 ...

  7. java静态类和非静态类的区别_Java中静态内部类和非静态内部类到底有什么区别?...

    内部类(Inner Class)和静态内部类(Static Nested Class)的区别: 定义在一个类内部的类叫内部类,包含内部类的类称为外部类.内部类可以声明public.protected. ...

  8. Java中静态内部类和非静态内部类的区别

    在一个类中定义的类叫内部类,内部类可以为静态内部类(用static关键字修饰),也可以为非静态内部类(普通类). 区别一:         静态内部类可以有静态成员变量和方法,非静态内部类只能有非静态 ...

  9. 什么是内部类?有什么作用?静态内部类和非静态内部类的区别?

    一. 定义 放在一个类的内部的类我们就叫内部类. 二. 作用 1.内部类可以很好的实现隐藏 一般的非内部类,是不允许有 private 与protected权限的,但内部类可以: 平时我们对类的访问权 ...

  10. 静态内部类和非静态内部类区别汇总

    一.非静态内部类: 1.变量和方法不能声明为静态的.(类的编译顺序:外部类--静态方法或属性--内部类,如果内部类声明为静态的,造成编译顺序冲突.个人理解) 2.实例化的时候需要依附在外部类上面.比如 ...

最新文章

  1. c#:Reflector+Reflexil 修改编译后的dll/exe文件
  2. linux 5.8 yum源,Centos5.8 |linux yum源不能用报404错误
  3. 想学好Java开发,你要做到这三点
  4. 云服务器cpu系列,云服务器cpu系列
  5. potplayer如何添加m3u直播源_拼多多个人直播流量怎么来?直播如何添加个人商品...
  6. Exchange2003不能自动删除日志
  7. Java实现POS打印机无驱打印(转)
  8. 将WinPE安装至硬盘
  9. HMI——“已连续登录3次,用户已注销”问题
  10. 非功能需求分析是什么
  11. windows系统C盘扩容详解
  12. 从不跑步到无间断跑步1年感受
  13. 各种编码格式(非常经典)
  14. 翼支付杯大数据建模大赛-季军方案
  15. Mybatis - <choose> 标签的用法
  16. 集成底座项目实施总结
  17. 大一上学期C语言不熟知识点学习总结
  18. 中国记账软件行业现状规模与应用前景预测报告(2022-2027)
  19. Mysql数据库报错:Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DY
  20. About云公益4月名额抽取

热门文章

  1. java 2015001_hbase的Java操作
  2. 快速突破面试算法之双指针篇
  3. eslint 换行_给 eslint 写一个插件
  4. 小程序ASC解密(java)
  5. service mysqld restart 报错 Redirecting to /bin/systemctl restart mysqld.service
  6. 第 7 章 Neutron - 073 - Service Plugin / Agent
  7. 【Docker端口映射】
  8. 2.3 利用FTP服务器下载和上传文件
  9. javascript 原型链实现继承简单例子
  10. ubuntu 强制关闭某个程序