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 程序中实际实现它们。

更新于: 2023年8月2日

145 次查看

启动你的 职业生涯

通过完成课程获得认证

开始学习
广告