在JAVA中,如果一个类,方法,属性被设置成protected,表明只能在子类或者同一个命名空间中才能使用,但我们可以巧妙的利用特殊的编码方式,在其他的命名空间下,创造同一个命名空间,从而访问 protected 代表的类,方法,属性。
举例,定义一个Person类,注意:address 是protected static
package test;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;
public class Person {
{
System.out.println("instance 1");
System.out.println(toString());
}
static {
System.out.println("static 1");
}
private String privateName = "privateName";
protected String protectedName = "protectedName";
String friendlyName = "friendlyName";
public String publicName = "publicName";
private static String privateStaticName = "privateStaticName";
protected static String protectedStaticName = "protectedStaticName";
static String friendlyStaticName = "friendlyStaticName";
public static String publicStaticName = "publicStaticName";
public Person() {
System.out.println("no name");
}
public Person(String name) {
System.out.println("my name is " + name);
System.out.println(toString());
this.privateName = name;
System.out.println(toString());
}
public String toString() {
return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
.append("privateName", privateName)
.append("protectedName",protectedName)
.append("friendlyName",friendlyName)
.append("publicName",publicName)
.append("privateStaticName",privateStaticName)
.append("protectedStaticName",protectedStaticName)
.append("friendlyStaticName",friendlyStaticName)
.append("publicStaticName",publicStaticName).toString();
}
{
System.out.println("instance 2");
System.out.println(toString());
}
static {
System.out.println("static 2");
}
}
利用new Person()制造命名空间:
package test;
public class PersonTest {
public static void main(String[] args) {
Person person = new Person("bob") {
{
System.out.println("outside");
}
public void cut() {
System.out.println("cut");
}
{
publicName = "newPublicName";
protectedName = "newProtectedName";
friendlyName = "newFriendlyName";
publicStaticName = "newPublicStaticName";
protectedStaticName = "newProtectedStaticName";
friendlyStaticName = "newFriendlyStaticName";
cut();
System.out.println(toString());
}
};
System.out.println(person.toString());
}
}
分享到:
相关推荐
正确地使用它们可以帮助开发者更好地管理代码的可见性和访问控制,从而构建出更安全、更易于维护的应用程序。需要注意的是,在实际开发过程中,应根据具体的需求选择合适的权限修饰符,以达到最佳的代码组织效果。
4. 包的命名:通常使用小写字母,多个单词组成时,用点分隔,例如`java.util`。 5. 参数的命名:应该简洁明了,以小写字母开头,遵循变量命名规则,例如`index`、`item`。 6. 避免使用缩写:除非是广泛接受的缩写...
总结一下,Java中的包管理类的命名空间,避免了命名冲突,而访问控制则确保了代码的封装性,实现了信息隐藏和模块化。合理地使用包和访问控制,可以使我们的代码结构更清晰,易于理解和维护,同时增加了代码的安全性...
总的来说,这个项目旨在演示如何在Java中使用包管理和访问控制符,以及可能涉及的文件操作。通过Base类、Derived类和testData类的交互,我们可以学习到如何有效地组织代码,控制类的可见性,并理解包和访问权限在...
通过运行和分析这个案例,你可以更好地理解Java访问控制的实际应用。 通过深入学习和实践这个Java开发小案例,你将掌握如何在实际项目中运用访问权限控制,提升代码的安全性和可维护性。对于初学者来说,这是一个...
访问控制是JAVA中的重要概念,访问控制符可以是public、protected、private等。public表示可以从任意位置访问,protected表示只能被直接子类和同包中的类访问,private表示只能被类内部访问。 数组、向量Vector与...
访问控制在Java中主要通过四种访问修饰符实现:`public`、`protected`、`default`(通常称为包访问权限)和`private`。每种修饰符都有其特定的作用范围: 1. **`public`**:表示公开,可以在任何地方被访问,包括同...
首先,我们来看 Java 的访问控制修饰符。Java 提供了四种不同的访问级别,以控制类、接口、变量和方法的可见性: 1. `private`:私有访问修饰符,只允许在同一类内部访问。这是最低的访问级别,外部类无法直接访问...
为了保证代码的安全性和封装性,《Thinking in Java》详细介绍了Java中的访问控制符(access specifier),包括`public`、`protected`、`default`(没有关键字表示)和`private`。 - **public**:最开放的访问级别...
- Java支持的访问控制符有public、private、protected和默认访问权限(没有访问修饰符时的包内访问权限)。 - Java不支持静态方法(static方法)作为类及类成员的访问控制符。 - Java方法声明可以使用static...
本文将从命名空间、数据类型、变量命名、注释、输出、控制流语句、数组、方法传递参数、访问修饰符、继承、多态、接口、枚举器、结构等方面对JAVA与C#进行比较。 命名空间:C#中的命名空间是namespace,类似于Java...
Java中的访问控制符可以保护对类、变量、方法和构造方法的访问。 5. 组合编程的原理是什么? 组合是一种设计模式,将要组合的类的对象加入到该类中作为自己的成员变量。组合的优点包括: * 当前对象只能通过所...
这个项目可能包含了一系列的Java源文件,每个文件代表一个特定的类,展示不同的访问控制权限使用情况,例如如何正确地封装数据,如何在类之间共享功能,以及如何通过包来组织复杂的代码结构。 总的来说,这个压缩包...
通过结合使用访问控制符,可以精确控制类成员的可见性和可访问性。 5. **示例分析**:教材中可能包含了一些例子,例如,两个不同包中的类如何通过不同的访问控制符进行交互。这些例子展示了private、public和...
C# 中的成员访问修饰符有五种:`public`、`protected`、`internal`、`protected internal` 和 `private`,控制着成员的访问权限。Java 中也有类似的访问修饰符。 9. 类型参数 C# 中可以在类定义中使用类型参数,...
为了理解如何有效地访问这些同名的成员,我们需要深入理解Java的命名规则、作用域、访问修饰符以及多态性。以下是一些关键知识点: 1. **命名规则**:Java中的标识符(包括方法名和变量名)必须以字母、下划线(_)...
还有`protected`和默认(包访问)修饰符,分别提供了不同程度的访问控制。此外,`static`修饰符表示类级别的成员,不依赖于类的实例,而`final`表示不可改变的变量或方法,`abstract`用于定义抽象类或方法。 综上所...