A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

jinlong

中级黑马

  • 黑马币:47

  • 帖子:11

  • 精华:0

毕老师的 面向对象基础 第9天 面向对象(静态内部类) 最后的第二个注意

如何在外部类的静态方法中访问内部类,讲解提到:
“注意: 当外部类中静态方法访问内部类时,内部类也必须是static的”这一条注意有些纰漏。

因为如果在外部类的静态方法中创建了内部类的对象 即使内部类不是static的 也可以用这个对象调用该内部类的方法:
如下,在 class B中使用static void testB() 静态方法访问内部类 InnerB 的方法 innerBMethod()。
在testB()方法中创建内部类的对象(内部类不是static也可以创建对象)并调用内部类的方法: new B().new InnerB().innerBMethod();
这样就不必将内部类改成static了


所以从外部类的静态方法中方访问内部类时,可以将内部类改成static的或者使用 new 外部类类名().内部类类名().内部类成员 这种方式创建内部类对象然后访问内部类。 其实前者只是因为内部类改为static  就不需要用创建外部对象了, 相当于: new 外部类类名.内部类类名().内部类成员,而内部类本身又持有外部类的引用 所以连外部类的类名也可以省了 就是直接写成: new 内部类类名().内部类成员
  1. class B{
  2.         class InnerB {
  3.                 void innerBMethod(){
  4.                         System.out.println("innerBMethod");
  5.                 }
  6.         }
  7.        
  8.         public static void testB(){
  9.                 new B().new InnerB().innerBMethod();
  10.         }
  11. }
  12. public class staticInnnerDemo {

  13.         public static void main(String args[]){                B b = new B();
  14.                 b.testB();
  15.         }
  16. }
复制代码

目前Java基础只复习到这里,也许后边视频中会对此有补充,但还没有看到。
此处的理解可能有误,所以期待各位同学的补充。

首次发帖,代码的格式不知道 怎么缩进。。。:dizzy:

评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1 赞一个!

查看全部评分

3 个回复

倒序浏览
LZ学习的好仔细,膜拜中
回复 使用道具 举报
学习中............
回复 使用道具 举报
GOOD JOB!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马