前提:不在同一个包下,在同一个包下就变成package level的访问了,性质不一样
结论:只能访问自己继承的protected 部分,其他的包括父类的,或者其他实现了父类的派生类的,不能访问
这里再给出《java in a nutshell》中的一段话:
protected access requires a little more elaboration. Suppose class A declares a protected field x and is extended by a class B, which is defined in a different package (this last point is important). Class B inherits the protected field x, and its code can access that field in the current instance of B or in any other instances of B that the code can refer to. This does not mean, however, that the code of class B can start reading the protected fields of arbitrary instances of A! If an object is an instance of A but is not an instance of B, its fields are obviously not inherited by B, and the code of class B cannot read them.
参考:
http://zhangjunhd.blog.51cto.com/113473/19287
随便写了点示例
package pTest.pkg1;
public class SuperClass {
protected int x;
}
package pTest.pkg1;
public class SubClassA extends SuperClass {
void printX(){
System.out.println(x);
}
}
package pTest.pkg2;
import pTest.pkg1.SubClassA;
import pTest.pkg1.SuperClass;
public class SubClassB extends SuperClass {
public static void main(String[] args) {
SubClassB b = new SubClassB();
System.out.println(b.x);
SubClassA a = new SubClassA();
// System.out.println(a.x);
SuperClass s = new SuperClass();
// System.out.println(s.x);
}
}
把注释去掉,即可看到报错信息
the field SuperClass.x is not visible
分享到:
相关推荐
在Java编程语言中,类与对象是核心概念,它们构成了面向对象编程的基础。这篇博文将深入探讨这两个概念,以及它们如何...通过阅读“浅谈Java的类与对象”这篇文档,你将能更深入地了解这些核心概念,提升你的编程技能。
"浅谈Java面向对象程序设计" Java是一种面向对象的高级编程语言,其核心思想是模拟现实生活中的求解过程。面向对象程序设计是人类思维自然化的结果,是从低级到高级的发展结果。在Java语言中,面向对象内容主要包括...
然而,提供的压缩包文件"深入浅出谈java修饰符共6页.pdf.zip"似乎包含的是一个PDF文档,若要获取更多具体信息,需要解压并查看文档内容。在"赚钱项目"这个子文件中,可能涉及的是如何利用Java编程技能进行项目开发以...
3. **类定义方式**:两者类定义形式相似,但Java类定义无需结束分号,且严格遵循数据封装,没有友元函数和友元类的概念,而C++支持friend关键字,允许外部访问私有成员。 4. **访问控制符**:Java有public、...
Java的访问级别从低到高依次是private、default、protected和public,而C#有private、internal、protected、protected internal和public。值得注意的是,C#的internal访问级别与Java的default类似,但作用范围基于...
浅谈java面向对象(类,封装,this,构造方法) 面向对象编程是一种编程范式,强调使用对象和类来解决问题。 Java 是一种面向对象的编程语言,它提供了多种机制来支持面向对象编程,如类、对象、继承、多态、封装等。 ...
子类通过`extends`关键字指明其父类,并可以调用父类的构造方法,如`super()`或`super(参数列表)`。 子类对父类成员的访问权限遵循以下规则: 1. 公共成员(`public`):子类可以自由访问父类的公共成员。 2. 保护...
- C++的虚类通过使用`virtual`关键字指定虚函数,而Java的接口通过`implements`关键字来实现。 总的来说,C++的虚类更倾向于提供一部分实现,而Java的接口更注重于定义行为规范。选择使用哪一个取决于具体的设计...
在Java编程语言中,访问修饰符是用于控制类、接口、方法和变量的可访问性的关键字。它们决定了这些元素在程序中的可见性,是面向对象编程的重要组成部分。本篇文章将详细探讨Java中的四种主要访问修饰符:public、...
3. 抽象方法必须是public或protected,否则不能被子类继承。默认为public; 4. 抽象方法中不能有实现,否则编译报错; 5. 子类继承抽象类时,必须实现抽象类中的所有抽象方法,否则该子类也要被定义为抽象类。 二、...
主要有四种访问修饰符:`private`(私有,仅在当前类中可见)、`public`(公共,所有地方都可见)、默认(在当前包内可见)和`protected`(在当前包和子类中可见)。 对于私有成员变量,我们通常会使用getter和...
11. **JNI与JVM原理**:浅谈Java Native Interface(JNI),用于在Java程序中调用本地(非Java)代码,以及JVM的工作原理,包括类加载、内存管理和垃圾收集。 12. **案例分析**:可能包含一些简单的编程实例,帮助...
在Java编程语言中,`extends` 和 `implements` 关键字分别用于类的继承和接口的实现,它们是面向对象编程的重要特性。接下来我们将详细探讨这两个关键字的区别和使用场景。 1. **`extends` 关键字**: - `extends`...