- 论坛徽章:
- 2
|
我有下面一个程序,想要测试一下主类m和子类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();
- }
- }
复制代码 linux下用Openjdk编译有错误:
$ javac m.java
m.java:24: 错误: 无法从静态上下文中引用非静态 变量 this
sub1 s1=new sub1();//Error
^
1 个错误
很奇怪的地方是:
1. 在m的成员函数里面,可以sub1 s1=new sub1();但是在main函数里面就不可以,有语法错误。
2. 静态类sub2竟然都可以声明实例,但是非静态类sub1反而不行。
这个是java设计的什么原则导致的?
|
|