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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© fufeng 中级黑马   /  2014-4-4 00:29  /  1273 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

非静态内部类,在外部其他类中直接调用该类的非静态方法的可以是:
Outer.Inner in = new Outer().new Inner();//创建内部类对象
in.function();//调用内部类方法。
这样是没有问题的

对于静态内部类,在外部其他类中直接调用。如果采用以上方法,这会出现这样的编译错误
InnerDemo.java:83: 限定的新静态类
        Outer.Inner in = new Outer().new Inner();
                         ^
1 错误

我知道静态的内部类,在外部其它类中的直接调用非静态方法是:new Outer.Inner().function();这句话意思是先创建一个Outer类对象,
因为内部类Inner是静态的所以不需要创建对象,就直接可调用该类中的非静态方法。

疑问:静态内部类是不需要创建对象该类对象来调用该类方法呢?还是不能够创建静态内部类的对象?还有编译错误中的【限定的新静态类】又是什么意思?


评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 赞一个!

查看全部评分

3 个回复

倒序浏览
需要了解2个概念:内部类和静态修饰符static
1)首先,用内部类是因为内部类与所在外部类有一定的关系,往往只有该外部类调用此内部类。所以没有必要专门用一个Java文件存放这个类。
2)静态都是用来修饰类的内部成员的。比如静态方法,静态成员变量,静态常量。它唯一的作用就是随着类的加载(而不是随着对象的产生)而产生,以致可以用类名+静态成员名直接获得。
这样静态内部类就可以理解了,因为这个类没有必要单独存放一个文件,它一般来说只被所在外部类使用。并且它可以直接被用 外部类名+内部类名 获得。
以下举例详细说明怎么使用:
Student类有个叫School的内部类(非静态)
Student stu = new Student();
stu.School sch = new stu.School();
sch就是School的一个对象。

假如School是内部静态类
Student.School sch = new Student.School();

限定的新静态类报错就是错误的调用方法导致的吧没碰到过这个错误,希望可以一起交流。

评分

参与人数 1技术分 +1 收起 理由
菜小徐 + 1

查看全部评分

回复 使用道具 举报
谢谢你的解答,受教了
那静态内部类是能不能创建对应的子类呢?是不用还是不能,按道理说除了抽象类,接口,以及被私有化的类不能被创建本类对象外,没听说静态内部类不能创建对象,当然非静态内部类是可以创建对象,这个我明白
回复 使用道具 举报
fufeng 发表于 2014-4-4 11:24
谢谢你的解答,受教了
那静态内部类是能不能创建对应的子类呢?是不用还是不能,按道理说除了抽象类,接口 ...

我觉得应该是不用,因为它已经被静态修饰,就具有了静态的特性。
可以直接使用静态方式来调用比如这样
new Outer.Inner().function();
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马