java测试类对实现类进行测试(java调用内部类)

  Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。

image.png

  一、内部类一词解析

  在Java中,可以将一个类的定义放在另外一个类的定义内部,这就是内部类。内部类本身就是类的一个属性,与其他属性 定义方式一致。

  一个内部类的例子:

  public class Outer {

  private int radius = 1;

  public static int count = 2;

  public Outer() {

  }

  class inner{

  public void visitOuter() {

  System.out.println("visit outer private member variable:" + radius);

  System.out.println("visit outer static variable:" + count);

  }

  }

  }复制代码

  二、内部类的种类

  内部类可以分为四种:成员内部类、局部内部类、匿名内部类和静态内部类。

  几种内部类的共性:

  A、内部类仍然是一个独立的类,在编译之后内部类会被编译成独立的.class文件,但是前面冠以外部类的类命和$符号。

  B、内部类不能用普通的方式访问。内部类是外部类的一个成员,因此内部类可以自由地访问外部类的成员变量,

  无论是否是private的。

  1、成员内部类

  成员内部类:形式如下

  class Outer {

  class Inner{}

  }

  编译上述代码会产生两个文件:Outer.class和Outer$Inner.class。

  成员内部类内不允许有任何静态声明!下面代码不能通过编译。

  class Inner{

  static int a = 10;

  }

  能够访问成员内部类的唯一途径就是通过外部类的对象!

  A、从外部类的非静态方法中实例化内部类对象。

  示例1:

  public class OuterClass {

  //外部类的方法

  public void test(){

  System.out.println("this is test...");

  InnerClass in=new InnerClass();

  in.show();

  }

  //内部类

  class InnerClass{

  public void show()

  {

  System.out.println("This is innerClass show");

  }

  }

  public static void main(String[] args) {

  OuterClass out=new OuterClass();

  out.test();

  }

  }

  表面上,我们并没有创建外部类的对象就实例化了内部类对象,和上面的话矛盾。事实上,如果不创建外部类对象也就不可能调用

  makeInner()方法,所以到头来还是要创建外部类对象的。你可能试图把makeInner()方法修饰为静态方法,

  即static public void makeInner()。这样不创建外部类就可以实例化外部类了!

  但是在一个静态方法里能访问非静态成员和方法吗?显然不能。它没有this引用。没能跳出那条规则!

  但是如果在这个静态方法中实例化一个外部类对象,再用这个对象实例化外部类呢?完全可以!


发表评论

评论列表

还没有评论,快来说点什么吧~