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

目录
相关文章
|
6月前
|
Java 程序员 数据安全/隐私保护
Java的访问权限
Java的访问权限
83 1
|
6月前
|
安全 Java API
JAVA三种权限认证框架的搭建方法
SaToken、JustAuth和MaxKey是三个用于身份认证和权限管理的工具。SaToken是轻量级框架,简化登录、权限、OAuth2.0等认证,适合中小型项目;JustAuth是第三方授权登录库,支持多种社交平台,易于集成;MaxKey是企业级IAM产品,提供复杂的权限管理和统一认证,支持多种标准协议及社交账号集成。
399 1
|
2月前
|
安全 Java 开发者
Java修饰符与封装:理解访问权限、行为控制与数据隐藏的重要性
Java中的修饰符和封装概念是构建健壯、易维护和扩展的Java应用程序的基石。通过合理利用访问权限修饰符和非访问修饰符,开发者能够设计出更加安全、灵活且高效的代码结构。封装不仅是面向对象编程的核心原则之一,也是提高软件项目质量和可维护性的关键策略。
16 1
|
1月前
|
Java
java中的权限修饰符
java中的权限修饰符
|
3月前
|
Java
【Java基础面试三】、说一说你对Java访问权限的了解
这篇文章介绍了Java中的四种访问权限:private、default(无修饰符时的访问权限)、protected和public,以及它们分别在修饰成员变量/方法和类时的不同访问级别和规则。
【Java基础面试三】、说一说你对Java访问权限的了解
|
3月前
|
前端开发 Java 编译器
【前端学java】类中的访问权限详解,通俗易懂(5)
【8月更文挑战第9天】类中的访问权限详解,通俗易懂(5)
49 0
|
5月前
|
Java 数据安全/隐私保护
Java基础手册二(类和对象 对象创建和使用 面向对象封装性 构造方法与参数传递 this关键字 static关键字 继承 多态 方法覆盖 final关键字 访问控制权限修饰符)
Java基础手册二(类和对象 对象创建和使用 面向对象封装性 构造方法与参数传递 this关键字 static关键字 继承 多态 方法覆盖 final关键字 访问控制权限修饰符)
34 0
|
5月前
|
Java
详解Java中的protected修饰的访问权限
详解Java中的protected修饰的访问权限
|
6月前
|
存储 关系型数据库 MySQL
《MySQL 入门教程》第 05 篇 账户和权限,Java高并发编程详解深入理解pdf
《MySQL 入门教程》第 05 篇 账户和权限,Java高并发编程详解深入理解pdf
|
设计模式 Java 安全
Java中包的作用以及使用、访问权限、单例/多例设计模式、枚举和异常(附带相关面试题)
本章节讲述以下方面知识点 1.包的作用以及使用 2.单例/多例化设计模式 3.枚举 4.访问权限2.异常
79 0
Java中包的作用以及使用、访问权限、单例/多例设计模式、枚举和异常(附带相关面试题)