java中包容易出现的错误及权限问题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
/*
3,权限在不同地方的体现:
                public   protected       default     private
同一类中:       ok       ok            ok         ok
同一包中:       ok       ok               ok
子类中:         ok       ok     
不同包中:       ok
 
在同一包中子类中是可以访问父类中默认权限(default)的方法,但是在不同包中不行!
在不同包中如果子类继承了父类,那么子类就可以访问父类中的protected方法!
*/
 
 
//import mytest.*;
/*
package mytest;
public class DemoA{
    public void show(){
       new Demo().show();
    }
}
 
class Demo{
    void show(){
       System.out.println("DemoA 中 Demo show!");
    }
}
*/
 
/*
package mytestone;
import mytest.*;
public class DemoAChild extends DemoA{
     public void show(){
         super.show();
         System.out.println("DemoAChild show!");
     }
}
*/
 
public class Test{
   public static void main(String[] args){
        //DemoA在mytest包中,将show方法protected之后就会挂掉
        //mytest.DemoA x = new mytest.DemoA();
        //x.show();
         
        // DemoAChild 继承了 DemoA, 该show方法也是protected权限,但是没有放在包中。正常运行!
        //DemoAChild xx = new DemoAChild();
        //xx.show();
         
        //DemoAChild 继承了 DemoA,并放在包中, 该show方法必须是public权限才正常运行!
        mytestone.DemoAChild xx = new mytestone.DemoAChild();
        xx.show();
   }
}
 
/*
错误1:
Test.java:4: 错误: 无法访问DemoA
        DemoA x = new DemoA();
        ^
  错误的类文件: .\DemoA.class
    类文件包含错误的类: mytest.DemoA
    请删除该文件或确保该文件位于正确的类路径子目录中。
1 个错误
 
原因:DemoA这个类是属于包mytest体系的,没有放在正确的子路径下!之前的编译为:javac DemoA.java
处理:删掉编译产生的.class文件, 重新编译 javac -d . DemoA.java(让系统自动生成包的子目录);
 
——----------------------------------------------------------
错误2:
Test.java:4: 错误: 无法访问DemoA
        DemoA x = new DemoA();
        ^
  错误的源文件: .\DemoA.java
    文件不包含类DemoA
    请删除该文件或确保该文件位于正确的源路径子目录中。
1 个错误
 
原因:源文件和自定义的包在同一子目录下!
处理:请删除该文件或确保该文件位于正确的源路径子目录中。或者明确 DemoA的所属包,即 mytest.DemoA
 
--------------------------------------------------------------
错误3:
Test.java:4: 错误: 找不到符号
        DemoA x = new DemoA();
                      ^
  符号:   类 DemoA
  位置: 类 Test
2 个错误
 
原因:类名错误。
处理:因为DemoA已经有包所属,必须明确其包名。所以应为 包名.DemoA 即 mytest.DemoA
      或者 import mytest.*; 导入包中的类
--------------------------------------------------------------
错误4:
Test.java:4: 错误: DemoA在mytest中不是公共的; 无法从外部程序包中对其进行访问
        mytest.DemoA x = new mytest.DemoA();
              ^
原因:包与包之间的访问权限必须是public的! 否则 其他的三个(protected default private)权限都是将类封装在包内!
处理:那就加上public白!
 
---------------------------------------------------------------
错误5:
Test.java:5: 错误: show()在DemoA中不是公共的; 无法从外部程序包中对其进行访问
        x.show();
         ^
1 个错误
原因:包中的类是对外公有的,所以该类的成员方法如果在其他包中的类中使用必须也将权限定义为公有!
处理:再加上public白!
 
 
*/









本文转自 小眼儿 博客园博客,原文链接:http://www.cnblogs.com/hujunzheng/p/3871941.html,如需转载请自行联系原作者
上一篇:Win10 IoT C#开发 1 - Raspberry安装IoT系统及搭建开发环境


下一篇:从零开始入门 K8s | 应用配置管理