谈谈内部类

首先谈谈非静态内部类

1、非静态内部类可以直接访问外部类的属性值,但是外部类却不能直接访问非静态内部类 的属性值,必须显式创建内部类对象来访问。

 

package com.wisco.lidahu;

import com.sun.org.apache.bcel.internal.classfile.InnerClass;

public class InnerClassTest {

 private String name="外部属性";
 private String nameString="同名外部属性";
 /**
  * @Title: main
  * @Description: TODO(这里用一句话描述这个方法的作用)
  * @param
  * @return void    返回类型
  * @throws
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub

  new InnerClassTest().test();
 }
 
 public void test(){
  new InnerClass().info();
 }
 
 
 public class InnerClass{
  private String nameString="内部属性";
  
  public void info(){
   System.out.println(name);
   System.out.println(InnerClassTest.this.nameString);
   System.out.println(this.nameString);
  }
 }
}

结果:

外部属性
同名外部属性
内部属性

这是为什么呢?

2、在new一个外部类的时候并没有创建非静态内部类的对象,如果允许访问内部类的属性,肯定会引起错误。总之,不允许外部的静态成员直接调用内部类。另外非静态内部类不包含静态成员。

3、如果存在一个内部类对象,肯定存在他寄存的一个外部类对象。反之,则不然,你懂的。

 

现在谈谈静态内部类

1、静态内部类包含静态成员也包含非静态成员,静态内部类不能访问外部类 的实例成员,但可以访问外部类的类成员

2、静态类跟外部类的类对象相关,而不是跟外部类的对象相关。

3、接口也可以定义内部静态类(接口的内部类必须用 public static)

例子不写了,太晚了!

 

 还有局部内部类和匿名内部类,局部内部类主要是不能再外部类以为的地方使用。匿名内部类主要是创建只需要使用一次的类。命令模式经常用到!

你可能感兴趣的:(内部类)