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' 类的 'print()' 方法。如果 '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 程序中实际实现它们。