比较来自世界各地的卖家的域名和 IT 服务价格

默认访问说明符和安全访问说明符之间的差异 java

我试图学习 java, 当我通过访问说明员时,我有疑问。 如果未指定标准说明符和受保护的访问说明符之间的区别是多少? java?
已邀请:

江南孤鹜

赞同来自:


http://java.sun.com/docs/books ... .html
Java 也许你很有用。


Modifier | Class | Package | Subclass | World

public | Y | Y | Y | Y

protected | Y | Y | Y | N

no modifier | Y | Y | N | N

private | Y | N | N | N

小明明

赞同来自:

说明书
protected

允许您访问正在考虑的类的所有子类,无论它们是哪个数据包,以及在同一包中的另一个代码。 默认说明符允许访问同一包中的其他代码,但不是位于不同包中的子类中的代码。 厘米
http://docs.oracle.com/javase/ ... s-6.6
.

EDIT: 适用于迈克尔·桑默勒 /因此,其他人不必阅读评论或继续链接以找到它/: 所有接口成员都隐含地公开可用。 实际上,为除了的接口元素指定任何访问说明符
public

, 是一个编译时间错误 /虽然没有默认访问说明符 public access/. 这是一组完整的规则 JLS 对于课堂成员 /有关包,顶级类和接口的规则,以及阵列,请参阅上面的链接/:

成员 /类,接口,字段或方法/ 参考类型 /类,接口或数组/ 或仅当类型可用时可用的类类型设计器,并且声明成员或设计器允许访问:

如果元素或构造函数被声明打开,则允许访问访问权限。

所有接口成员都是隐式打开的。

否则,如果声明了成员或构造函数保护,则仅在执行以下条件之一时才允许访问:


从包含一个类别的包裹中访问成员或设计,其中已声明了安全成员或设计器。

如上所述,访问是正确的
http://docs.oracle.com/javase/ ... 6.6.2
. /该提议涉及允许衍生类联系超类的受保护成员的规则; §6.6.2 开始这样的:

"可以从数据包的外部访问安全成员或对象设计器,其中仅由负责此对象实现的代码声明。

" 然后他在这方面详细停止。/


否则,如果已声明成员或设计者已关闭,则允许访问权限,只有在顶层主体中发生 /
http://docs.oracle.com/javase/ ... s-7.6
/, 这是一份会员或设计师的公告。

否则,我们说有一个默认的访问权限,才能允许在访问该类型所声明的程序包时允许。

詹大官人

赞同来自:

受保护的访问说明符 - 有两种方法可以访问受保护数据。

受保护的数据成员,如果它们进入其他类,则安全类方法将可见

一个包


使用

遗产

这意味着我们可以使用此类的受保护数据,继承此类。

默认访问说明符 - 只有一种访问默认数据的方法

默认情况下,只有通过包级别仅限访问权限。 , 即使在类扩展名为默认数据元素之后,我们也无法访问。

例子

检查它是否为关键字 remove protected 默认为 int x 在 ProvideProtected , 将生成编译时间错误。


1. SuperClass

package nee.superclass;

public class ProvideProtected {
protected int x=800;

}

2.Subclass


package nee.subclass;

import nee.superclass.*;

public class AccessProtected extends ProvideProtected

{
public void accessProtected//
{
System.out.println/x/;
}

public static void main/String[] args/ {
AccessProtected obj=new AccessProtected//;
obj.accessProtected//;

}

}

窦买办

赞同来自:

受保护的访问修饰符 :- 在相同的包装内可以看出标记为保护的所有标记,并且也可以在子类中看到。 .

默认访问 :- 默认情况下,这不是关键字 . 如果未指定访问修饰符,则适用 . 这基本上是包级修饰符。 在同一包装中可见此类访问的所有内容。 .

现在可以使用该示例更好地解释差异

包裹 p1


public class A
{

protected void fn//
{

}

}


包裹 p1


public class B
{

A a1 = new A//;

a1.fn//;// fn// is visible inside the same package

}

}


现在我们在另一个包装中接近子类

包裹 p2


public class D extends A

{

void test//

{

A a1 = new new A//;

//a1.fn// --> would give compilation error
fn//;

super.fn//;

}

}



fn//, super.fn//

不会犯错误。

因此,差异在于该方法的子类不能由超类参考引起的。 要么你可以直接打电话给它 super.

注意
super.fn//

必须是非静态方法的一部分。

二哥

赞同来自:

简而言之:


default

会员可用

所有其他课程的同一包

;


protected

会员可用

所有其他课程的同一包



在任何其他类别的任何其他包中,直到该类扩展了包含您的安全成员的类。

要回复问题请先登录注册