您的位置:首页 > 编程语言 > Java开发

java学习之内部类

2015-08-21 10:03 567 查看
java支持在一个类的内部定义一个类(非static类,static内部类也叫作嵌套类,不要与内部类混淆),该类就是外部类的内部类,下面将学习记录如下:

1.内部类的创建,在该内部类直属外部类里面创建内部类对象无需指定外部类(即无需采用outerClassName.innerClassName),在非直属类(该内部类不是该类的直接内部类)则需要指定该内部类外部类(即outerClassName.innerClassName这种方式),至于要采用几级外部类,应该以下面这个规则为准(增加外部类直到最顶层外部类该引用该内部类的类中可见为止,有点拗口

),java编程思想关于内部类创建这部分给出的规则貌似不对哈(详见第四版347页10.1小节)

2.内部类与外部类的关联关系,内部类对象创建后,该对象就具有访问外围类对象的所有成员的能力,内部类对象内部方法可以任意使用外部类方法以及属性(不管是private还是public类型)

3.内部类内部不允许创建静态方法,否则会提示下面错误信息(The method sayHi cannot be declared static;static methods can only be declared in a static or top level type

4..this与.new的使用,当需要在内部类方法内部引用外部类对象时,可以采用outerClass.this的方式来获取对外部类对象的引用(即创建内部类对象时使用的外部类对象);在其他其他创建内部类时,需要使用外部类对象来创建(即外部类对象引用.new来创建内部类),不能使用外部类来创建(即不能按照new outerClass.innerClass的方式来创建);关于内部类对象这么创建的原因,《java编程思想》里面给出了解释:内部类对象创建后会自动跟创建它的外部对象链接上,没有外部类对象就不能创建内部类对象

5.内部类的继承,由于内部类的构造函数必须连接到其外围对象引用,因此继承内部类时存在下面这个问题:继承类中不存在该内部类可连接的外围类,因此需要明确指定内部类与其外围类的关系,具体做法如下(以一个例子给出):

class outerClass

{

  class innerClass{}

}

public class InheritClass extends outerClass. innerClass

{

   //InheritClass(){}  注:这里不能使用默认构造函数,否则会出现以下编译错误信息:No enclosing instance of 

//type    WithInner is available due to some intermediate constructor invocation

  InheritClass
(outerClass outer)

  {

    outer.super();

  }

  public static void main()

  {

    outerClass outer = new
outerClass();

   InheritClass 
inherit = new InheritClass(outer);

  }

}

6.内部类不能被覆盖,如果某个类继承了某个外围类,继承类内部定义了一个与外围类名字相同的类,那么这两个类并不会存在覆盖问题,因为这两个内部类属于不同的命名空间

不对之处,欢迎跟帖回复~~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: