为什么java不允许创建内部类的实例?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了为什么java不允许创建内部类的实例?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1381字,纯文字阅读大概需要2分钟。
内容图文
![为什么java不允许创建内部类的实例?](/upload/InfoBanner/zyjiaocheng/746/237b35bf164b49bf854891cee5d01583.jpg)
参见英文答案 > Java inner class and static nested class 25个
我有一个主类“m”和2个内部类叫做sub1,sub2,其中sub2是静态类:
public class m
{
String n="n";
static String s="s";
public class sub1
{
public void fn(){System.out.println(n);}
//static public void fs(){System.out.println(s);}
}
static class sub2
{
//public void fn(){System.out.println(n);}
static public void fs(){System.out.println(s);}
}
public void f()
{
sub1 s1=new sub1();//OK, no error
sub2 s2=new sub2();//OK
}
public static void main(String[] args)
{
m obj=new m();
sub1 s1=new sub1();//Error
s1.fn();
//s1.fs();
sub2 s2=new sub2();//OK
//s2.fn();
s2.fs();
}
}
我使用Openjdk在linux下编译它,它报告错误
$java -version
openjdk version "1.8.0_91"
OpenJDK Runtime Environment (build 1.8.0_91-8u91-b14-3ubuntu1~16.04.1-b14)
OpenJDK 64-Bit Server VM (build 25.91-b14, mixed mode)
$javac m.java
m.java:24: Error: Cannot reference non-static variable this in a static context.
sub1 s1=new sub1();//Error
^
1 Errors
这对我来说很奇怪:
1.在m.f()成员函数中,我们可以“sub1 s1 = new sub1();”,但在main中,我们不能
2. staic class sub2可以有实例,而非静态sub1不能吗?
这是Java的设计吗?为什么?
解决方法:
>非静态内部类被视为外部类的成员.
>要创建实例,需要使用外部类的引用.
所以你必须做这样的事情,
OuterClass outer = new OuterClass();
InnerClass inner = outer.new InnerClass();
所以,在你的情况下,
m obj = new m();
sub1 s1 = obj.new Sub1();
内容总结
以上是互联网集市为您收集整理的为什么java不允许创建内部类的实例?全部内容,希望文章能够帮你解决为什么java不允许创建内部类的实例?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。