【发布时间】:2011-01-31 18:35:10
【问题描述】:
java 中的类可以有除 public 之外的任何其他访问说明符吗? 我们可以使用具有除 public 以外的说明符的类名保存我们的文件吗?
【问题讨论】:
标签: java
java 中的类可以有除 public 之外的任何其他访问说明符吗? 我们可以使用具有除 public 以外的说明符的类名保存我们的文件吗?
【问题讨论】:
标签: java
您的意思可能是 Java 访问修饰符:
Default access (package acces)
public
private
protected
在 Java 中,访问说明符的正确命名是:Java 非访问修饰符
非访问修饰符是那些与访问级别没有任何关系但在指定时提供特殊功能的关键字
final
static
abstract
synchronized
transient
volatile
strictfp
【讨论】:
访问说明符用于限制编程中的访问。 这些说明符确定类中的字段或方法是否可以被另一个类方法或子类方法使用或调用。
有四个访问说明符
1)公开 2)私人 3)受保护 4)默认
根据我们的规范,这些用于在编程中访问某些级别。
1) 公开 声明为 public 的类、方法和字段可以从 Java 程序中的任何其他类访问,无论它们是在同一个包中还是在另一个包中。
2)私人
声明为私有的字段和方法可以在它们所属的同一类中访问。使用私有说明符我们还可以实现用于隐藏数据的封装
3) 受保护 声明为受保护的字段和方法只能由另一个包中的子类或受保护成员类的包中的任何类访问。记住,受保护的说明符不适用于类和接口。
4) 默认 如果您不声明任何说明符,它将遵循默认的可访问性级别。在哪里,没有默认关键字。类、字段、方法可以被默认访问(不声明说明符)。通过使用默认说明符,我们可以访问属于同一个包的类、方法或字段,但不能从包外访问。
【讨论】:
在 Java 中没有访问说明符。在 Java sun 中,Microsoft 提供了修饰符。
根据 Sun Microsoft 的说法,有很多修饰符
privateprotectedpublicstaticfinalabstractsynchronizedtransientvolatilestrictfp有些人认为private、public、protected 是访问说明符。但是根据 Sun Microsoft 的说法,它们被称为修饰符。
【讨论】:
Java 有四种可见性级别:公共、受保护、(默认)、私有
对包可见。默认值。不需要修饰符。
仅对班级可见(私有)。
对全世界(公众)可见。
对包和所有子类可见(受保护)。
查看图片了解访问说明符的使用详情
【讨论】:
是的,它们可以是包私有的。这是由以下定义的:
class foo {
int data;
}
然而,Java 中的非嵌套类不能是private 或protected。
最后,一个类可以是abstract、final或strictfp
我在Java Pocket Guide 中验证了这一点(它在我的桌子上。)
【讨论】:
详细解释见http://java.sun.com/docs/books/tutorial/java/javaOO/accesscontrol.html:
一个类可以用 修饰符 public,在这种情况下 类对所有类可见 到处。如果一个类没有修饰符 (默认值,也称为 包私有),它只可见 在自己的包中
您还可以使用私有内部类来向外部隐藏实现。
【讨论】:
java 中的访问修饰符 - 解释。
I) 类级访问修饰符(仅限 java 类)
只允许两个访问修饰符,
public并且没有修饰符如果一个类是“
public”,那么它可以从任何地方访问。如果一个类没有“修饰符”,那么它只能从“同一个包”访问。
II) 成员级访问修饰符(java 变量和 java 方法)
所有四个
public、private、protected,并且不允许任何修饰符。
public并且没有修饰符 - 相同 类级别中使用的方式。
private– 成员只能访问。
protected– 可以从 'same package' 和一个子类存在 在任何包中都可以访问。
来源:http://javapapers.com/core-java/access-modifiers-in-java-explain
【讨论】:
顶级类只能是public 或包私有(无访问修饰符)。
嵌套类也可以是private 或protected。
【讨论】:
顶级类可以具有public 或default(“包私有”)可见性。
内部类也可以是private 和protected(以及上面的):
public class OuterClass
{
private class InnerClass
{
// ....
}
// ....
}
【讨论】:
当然,没有理由不这样做。
【讨论】: