zoukankan      html  css  js  c++  java
  • 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白!
    
    
    */
    

      

  • 相关阅读:
    iOS 证书错误 Certificates下面的 App Store and Ad Hoc是灰的?? 点不了
    iOS 发布证书错误 Your build settings specify a provisioning profile with the UUID, no provisioning profile was found
    不能修改“System Roots”钥匙串 即下载的.cer 文件添加不到钥匙串
    修改 “嗨加游-Prefix.pch” 或者 “嗨加游-Info.plist ” 方法
    Java基础1(2015-8-2)
    认识modernizr----前端
    VS2013的C#项目与SQL Server2012无法连接的问题
    安装完SQL Server 2012后,由Windows身份验证设置为混合型的身份验证
    C#项目,在controller文件夹右击鼠标没有“添加控制器”的问题
    复制已存在的数据库结构(不包括库中的数据)
  • 原文地址:https://www.cnblogs.com/hujunzheng/p/3871941.html
Copyright © 2011-2022 走看看