千家信息网

如何理解Java内部类中的成员内部类

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,如何理解Java内部类中的成员内部类,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。在Java中,可以将一个类定义在另一个类里面或者一个方
千家信息网最后更新 2026年11月01日如何理解Java内部类中的成员内部类

如何理解Java内部类中的成员内部类,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。广泛意义上的内部类一般来说包括这四种:成员内部类、局部内部类、匿名内部类和静态内部类。下面就先来了解一下这四种内部类的用法。

  成员内部类

  成员内部类是最普通的内部类,它的定义为位于另一个类的内部,形如下面的形式:

class Circle {    double radius = 0;         public Circle(double radius) {        this.radius = radius;    }         class Draw {     //内部类        public void drawSahpe() {            System.out.println("drawshape");        }    }}

 这样看起来,类Draw像是类Circle的一个成员,Circle称为外部类。成员内部类可以无条件访问外部类的所有成员属性和成员方法(包括private成员和静态成员)。

class Circle {    private double radius = 0;    public static int count =1;    public Circle(double radius) {        this.radius = radius;    }         class Draw {     //内部类        public void drawSahpe() {            System.out.println(radius);  //外部类的private成员            System.out.println(count);   //外部类的静态成员        }    }}

不过要注意的是,当成员内部类拥有和外部类同名的成员变量或者方法时,会发生隐藏现象,即默认情况下访问的是成员内部类的成员。如果要访问外部类的同名成员,需要以下面的形式进行访问:

1

2

外部类.this.成员变量

外部类.this.成员方法

  虽然成员内部类可以无条件地访问外部类的成员,而外部类想访问成员内部类的成员却不是这么随心所欲了。在外部类中如果要访问成员内部类的成员,必须先创建一个成员内部类的对象,再通过指向这个对象的引用来访问:

class Circle {    private double radius = 0;     public Circle(double radius) {        this.radius = radius;        getDrawInstance().drawSahpe();   //必须先创建成员内部类的对象,再进行访问    }         private Draw getDrawInstance() {        return new Draw();    }         class Draw {     //内部类        public void drawSahpe() {            System.out.println(radius);  //外部类的private成员        }    }}

成员内部类是依附外部类而存在的,也就是说,如果要创建成员内部类的对象,前提是必须存在一个外部类的对象。创建成员内部类对象的一般方式如下:

public class Test {    public static void main(String[] args)  {        //第一种方式:        Outter outter = new Outter();        Outter.Inner inner = outter.new Inner();  //必须通过Outter对象来创建                 //第二种方式:        Outter.Inner inner1 = outter.getInnerInstance();    }} class Outter {    private Inner inner = null;    public Outter() {             }         public Inner getInnerInstance() {        if(inner == null)            inner = new Inner();        return inner;    }          class Inner {        public Inner() {                     }    }}

 内部类可以拥有private访问权限、protected访问权限、public访问权限及包访问权限。比如上面的例子,如果成员内部类Inner用private修饰,则只能在外部类的内部访问,如果用public修饰,则任何地方都能访问;如果用protected修饰,则只能在同一个包下或者继承外部类的情况下访问;如果是默认访问权限,则只能在同一个包下访问。这一点和外部类有一点不一样,外部类只能被public和包访问两种权限修饰。我个人是这么理解的,由于成员内部类看起来像是外部类的一个成员,所以可以像类的成员一样拥有多种权限修饰。

看完上述内容,你们掌握如何理解Java内部类中的成员内部类的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

成员 对象 权限 方法 部类 方式 静态 面的 内容 变量 形式 情况 更多 问题 普通 束手无策 随心所欲 为此 一般来说 个人 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技园 广州万易互联网科技有限公司 科技互联网龙头 互联网中国科技 科技互联网技术 猪兼强互联网科技 西安互联网科技公司 一五八零互联网科技 济南和联互联网科技有限公司 互联网汽车科技小镇 阿里巴巴算科技企业还是互联网 剑昆互联网络科技有限公司临桂 港股科技和互联网 千方科技属于互联网企业吗 开一家科技互联网公司需要多少钱 互联网新科技动漫ppt素材 群盈汇互联网科技有限公司 互联网领先科技宣传片 悟空问答互联网科技 伍佰万互联网科技是干嘛的 百单网互联网科技有限公司怎么样 互联网科技公司招聘 互联网科技寓意 汽车互联网创新科技园 佳云科技和互联网广告 工业互联网等科技实现智能化赋能 元气玛特互联网科技公司是外包吗 领航科技大厦互联网公司 宇信科技在杭州互联网排第几 互联网 科技节活动 微视频大赛
0