备案 控制台
学习
实践
活动
专区
工具
TVP
写文章
专栏首页 johnhuster java学习之内部类
5 0

海报分享

java学习之内部类

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

不对之处,欢迎跟帖回复~~

本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!
本文分享自作者个人站点/博客: https://blog.csdn.net/john1337 复制
如有侵权,请联系 cloudcommunity@tencent.com 删除。