前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java学习之内部类

java学习之内部类

作者头像
johnhuster的分享
发布2022-03-28 13:33:04
3010
发布2022-03-28 13:33:04
举报
文章被收录于专栏:johnhuster

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

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015/08/21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档