Tag: 受保护

Java中的间接子类无法访问超类中的受保护成员

为什么在Java中,超类的受保护成员是不可被另一个包中的间接子类访问的? 我知道不同包中的直接子类可以访问超类的受保护成员。 我认为任何子类都可以访问其inheritance的受保护成员。 编辑 抱歉新手错误,子类可以访问间接超类的受保护成员。

为什么Java中的Object类包含受保护的方法?

为什么Java中的Object类包含受保护的方法,例如clone()和finalize() ,如果您使用或编写的所有类都inheritance了Object的实例方法?

尝试在位于其他包的子类中使用受保护的构造函数时,Eclipse显示错误

Hello Stackoverflow社区: – ] 我是新成员,首先我要感谢您提供的非常有用的建议和更正。 因为我是法国人,如果我的英语不完美,请原谅我。 这是我的问题:我正在学习Java编程语言,我想测试一些inheritance的东西。 如果我理解正确,声明为protected的字段可以由与声明受保护字段的类位于同一个包中的类以及它的所有子类访问,无论它们是否在同一个包中。 所以,我做了这4个类来测试这个。 我有一个名为“package1”的包,包含类A和C.我还有一个名为“package 2”的包,其中包含类A2和C,其中A2扩展为A.两个C类具有完全相同的代码,只是包中的它们位于变化。它们不会延伸A. 在A类中,我声明了一些具有不同访问属性的成员,尤其是使用protected visibility声明的构造函数。 这是四个类的代码。 package1,A类: package package1; public class A { public int a; protected int b; private int c; int d; protected static int h = 30; protected void aff(){ System.out.println(h); } protected A(){ a = 1; b = 2; c = 3; d […]

帮助理解受保护方法的问题

我正在阅读2005年4月的Sybex完整Java 2认证研究指南 (ISBN0782144195)。 本书适用于想要通过java认证的java开发人员。 在关于访问修饰符(以及其他修饰符)的章节之后,我发现了以下问题(#17): 对或错:如果类Y扩展了类X,那么这两个类在不同的包中,而类X有一个名为abby()的受保护方法,那么Y的任何实例都可以调用Y的任何其他实例的abby()方法。 这个问题让我有点困惑。 据我所知,你可以在同一个类(或子类)的任何变量上调用protected方法。 您不能在变量上调用它,层次结构中的变量比您更高(例如,您实现的接口)。 例如,您不能仅仅因为inheritance它而克隆任何对象。 但问题没有说明变量类型,只涉及实例类型。 我有点困惑,回答“真实”。 书中的答案是 假。 从不同包中的超类inheritance受保护方法的对象可以在自身上调用该方法,但不能在同一类的其他实例上调用该方法。 这里没有关于变量类型的内容,只有实例类型。 这很奇怪,我不明白。 谁能解释一下这里发生了什么?

如何保护java.lang.Object的受保护方法不受子类的影响?

关键字protected授予对同一包和子类中的类的访问权限( http://java.sun.com/docs/books/tutorial/java/javaOO/accesscontrol.html )。 现在,每个类都有java.lang.Object作为超类( http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html )。 因此,我得出结论,即使protected ,每个类都可以访问java.lang.Object的方法。 看一下下面的例子: 公共类Testclass { public Object getOne()抛出CloneNotSupportedException { return this.clone(); } public Object getTwo()抛出CloneNotSupportedException { return((Object)this).clone(); } } 虽然getOne()编译得很好,但getTwo()给出了 Testclass.java:6:clone()在java.lang.Object中具有受保护的访问权限 return((Object)this).clone(); 我既不理解为什么getTwo()没有编译,也没有理解与getTwo()什么区别(关于java.lang.Object成员的访问getOne() 。

Java:跨包的受保护访问

我想了解下面示例中发生的情况(通过子类从包外部访问受保护的成员)。 我知道对于包外的类,子类只能通过inheritance来查看受保护的成员。 有两个包: package1和package2 。 package1 : ProtectedClass.java package org.test.package1; public class ProtectedClass { protected void foo () { System.out.println(“foo”); } } package2 : ExtendsprotectedClass.java package org.test.package2; import org.test.package1.ProtectedClass; public class ExtendsprotectedClass extends ProtectedClass { public void boo() { foo(); // This works, // since protected method is visible through inheritance } public static void […]

为什么不能将类定义为受保护的?

我知道这是一个愚蠢的问题,但我仍然怀疑需要清除。 我的问题是, 为什么我们不能将类定义为protected ? 我知道我们不能,但为什么呢? 应该有一些具体的原因。