Java 不同名称重用技术
在Java中,存在不同的名称重用技术,用于各种类型的实体,例如变量、方法、数据类型或包。这些技术根据它们的需要和用途影响实体的可访问性和行为。在本文中,我们将讨论在Java中重用名称的四种常见方法:覆盖、隐藏、重载和遮蔽。
Java中的名称重用技术
遮蔽
这种技术允许局部变量具有与封闭类的另一个字段或成员相同的名称。在这种情况下,成员的先前实现被新变量的声明遮蔽。在遮蔽的作用域中,不能通过其简单名称访问被遮蔽的变量。
遮蔽的示例
下面的示例展示了变量的遮蔽
class OuterClass {
int val1 = 12109659; // instance variable
void printX() {
int val1 = 11368; // local variable
System.out.println("Value 1: " + val1); // belongs to current method
System.out.println("Value 2: " + this.val1); // belongs to class
}
}
public class Shwd {
public static void main(String[] args) {
OuterClass oc = new OuterClass(); // creating class object
oc.printX(); // method call
}
}
输出
Value 1: 11368
Value 2: 12109659
在上面的代码中,我们在方法‘printX()’中遮蔽了实例变量‘val1’。为了访问‘val1’,我们使用了‘this’关键字。
隐藏
这种技术允许子类隐藏其超类中定义的静态方法或字段。 子类实体必须与超类实体具有相同的名称和签名。我们大多数人将隐藏误认为是覆盖。在方法覆盖中,子类用一个新的方法替换了原始方法的实现,但在隐藏中,我们只是隐藏了超类的方法。此外,我们无法重写静态方法。
隐藏的示例
下面的示例演示了方法的隐藏。
class ClassA {
public static void print() {
System.out.println("This is Super Class method");
}
}
class ClassB extends ClassA {
public static void print() {
System.out.println("This is Sub Class method");
}
}
public class Main {
public static void main(String[] args) {
ClassA s1 = new ClassA(); // creating object
ClassA s2 = new ClassB();
// calling the methods
s1.print();
s2.print();
ClassB.print();
}
}
输出
This is Super Class method
This is Super Class method
This is Sub Class method
在上面的代码中,我们定义了一个’Super’类和一个’Sub’类,以及一个’print()’方法。’Sub’类的’print()’方法隐藏了’Super’类的方法。如果’s2.print’打印了子类的内容,那么这个示例将被认为是方法重写,而不是隐藏。
方法重载
当我们在同一个类体中创建两个或多个具有相同名称但参数列表不同的方法时,我们称之为方法重载。编译器根据参数类型在编译时确定方法调用。
方法重载的示例
这个示例展示了方法重载的实现。
public class Ovrld {
public static void methodA(String st1) {
System.out.println("First method string: " + st1);
}
public static void methodA(String st1, String st2) { // overloading
System.out.println("Second Method");
System.out.println("String1: " + st1 + ", String2: " + st2);
}
public static void main(String args[]) {
Ovrld obj = new Ovrld();
// method calling
obj.methodA("Tutorialspoint");
obj.methodA("Simple", "Learning");
}
}
输出
First method string: Tutorialspoint
Second Method
String1: Simple, String2: Learning
在上述代码中,我们定义了两个名称相同但参数不同的方法。在调用时,我们使用了不同的参数。
方法重写
当我们在超类和子类中创建两个或更多名称相同且参数列表相同但方法不同时,我们称之为方法重写。方法的返回类型也是相同的。
方法重写的示例
以下示例演示了方法的重写。
class Ovriid1 {
public void methodA(String st1) {
System.out.println("First method string: " + st1);
}
}
public class Ovriid2 extends Ovriid1 {
public void methodA(String st1) {
System.out.println("Second Method string: " + st1);
}
public static void main(String args[]) {
Ovriid1 obj1 = new Ovriid1();
Ovriid1 obj2 = new Ovriid2();
obj1.methodA("Tutorialspoint");
obj2.methodA("Tutorialspoint");
}
}
输出
First method string: Tutorialspoint
Second Method string: Tutorialspoint
在上面的代码中,子类’Ovriid2’覆盖了父类的’methodA() ‘。
结论
在本文中,我们学习了各种重用变量和方法名称的技术,例如方法重载、隐藏、遮蔽和方法重写。我们还看到了如何在我们的Java程序中实际应用它们。