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

/*
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白!


*/

  

上一篇:PostgreSQL SQL 语言:并行查询


下一篇:rxjs里tap操作符的使用单步调试