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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 会飞的狼 中级黑马   /  2013-8-8 19:28  /  1839 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

如果内部类被私有了,外部类可以new内部类对像并调用内部类方法吗?

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

9 个回复

倒序浏览
可以,不过要看什么情况,最好把代码贴上来
回复 使用道具 举报
楼主的问题确实有点模糊。我尽量猜测一下你的意思。
如果内部类被私有了,在外部类中可以new内部类对像并调用内部类方法。(注意,这里是在外部类中!)
但是,在外部其他类中,是不行的。

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
楼上说的对,内部类相当于外部类的成员,就好比私有成员一样,在其他类中是不可能访问的,但可以在内部类所在的外部类里访问。
回复 使用道具 举报
在外部其他类中访问非静态的内部类是不行的吧,一般内部类应该不会写成私有化的我感觉,因为写内部类不就是为了更快捷有效的操作外部类中的成员吗。
内部类是指在一个外部类的内部再定义一个类。内部类作为外部类的一个成员,并且依附于外部类而存在的。内部类可为静态,可用protected和private修饰(而外部类只能使用public和缺省的包访问权限)。
内部类的作用:
1.提供了更好地封装,把内部类隐藏在外部类之中,不允许同一包中的其它类访问该类。
2.内部类可以直接访问外部类的私有数据,因为内部类被当成外部类成员,同一个类成员之间可以相互访问。但外部类不能访问内部类的实现细节,如内部类属性。
3.匿名内部类适合那些仅需要使用一次的类

1.在外部类内部使用内部类:
在外部类的内部使用内部类时,与平常使用普通类没有太大的区别,通过new调用内部类构造器来创建实例,唯一存在区别的是:不要在外部类的静态成员中(静态方法和静态初始化块)中使用非静态内部类,因为静态成员不能访问非静态成员。
2.在外部类以外使用非静态内部类:
如果希望在外部类以为的地方访问内部类,(包括静态和非静态两种),则内部类不能使用private访问控制权限:在外部类以外的地方定义内部类(包括静态和非静态两种):OUterClass.InnerClass  varName 在外部类以外地方使用内部类时,内部类完整的类名应该是:包名.OuterClass.InnerClass

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
taotao 发表于 2013-8-8 20:28
楼主的问题确实有点模糊。我尽量猜测一下你的意思。
如果内部类被私有了,在外部类中可以new内部类对像并调 ...

谢谢 懂了
回复 使用道具 举报
外部类访问内部类,需要创建内部类对象才能访问,你可以试下
回复 使用道具 举报
三种内部类,这不算匿名内部类,你把两种成员内部类当成成员来看,你私有他不是私有他的构造方法,为什么不能NEW?
回复 使用道具 举报
外部类不能直接访问内部类的属性,只能通过new调用内部构造器来创建实例。唯一的区别就是,不要在外部类的静态成员 (例如main方法中)访问非静态内部类的成员。
就是不管里内部类的属性私有还是共有还是大家拥有,只要内部类是静态类 外部类就能通过new创建实例来访问
public class A
{
      class B
     {
           private   int x = 1;                  
     }
     public int getB()
     {
         return new B().age;
     }
     public static void main(String[] args)
     {
         System.out.println(new A().getB());
     }
}
回复 使用道具 举报
问题:如果内部类被私有了,外部类可以new内部类对像并调用内部类方法吗?
答:   在同一个外部类是可以的。
class Out
{
      int x=3;
    private  class Inner
      {
          void show()
          {
                  System.out.println("我在内部类哦");
            }
      }

      void  showInner()
      {
             //注意啦:在这里可以创建私有内部类对象哦,因为此时内部类就像是一个私有变量。
            Inner  in = new Inner();
            System.out.println("亲,我在外部类要调用私有内部类的方法了!");
            in.show();            
      }
}


class  InnerClassTest
{
    public static void main(String[] args)
    {
          //创建外部类
          Out  out = new Out();
          out.showInner();
    }
}

输出结果为:
  亲,我在外部类要调用私有内部类的方法了!
   我在内部类哦


有图有真相:



评分

参与人数 1技术分 +1 收起 理由
薛鹏鹏 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马