Java 中不同的名称重用技术
原文:https://www . geesforgeks . org/different-name-重用-technologies-in-Java/
覆盖一个实例方法覆盖超类中所有具有相同签名的可访问实例方法,实现动态调度;换句话说,虚拟机根据实例的运行时类型选择调用哪个重写。重写是面向对象编程的基础,也是通常不鼓励的唯一名称重用形式:
Java 语言(一种计算机语言,尤用于创建网站)
// Base Class
class Base {
public void f()
{ }
}
// Derived Class
class Derived extends Base {
// overrides Base.f()
public void f()
{ }
}
隐藏字段、静态方法或成员类型分别隐藏超类型中具有相同名称(或者,对于方法,签名)的所有可访问字段、静态方法或成员类型。隐藏成员可防止其被继承:
Java 语言(一种计算机语言,尤用于创建网站)
// Base class
class Base {
public static void f()
{ }
}
// Derived class
class Derived extends Base {
// hides Base.f()
public static void f()
{ }
}
重载如果类中的方法具有相同的名称和不同的签名,则它们会相互重载。由调用指定的重载方法在编译时被选择:
Java 语言(一种计算机语言,尤用于创建网站)
// Base class
class GeeksForGeeks {
// int overloading
public void f(int i)
{ }
// String overloading
public void f(String s)
{ }
}
隐藏一个变量、方法或类型分别隐藏文本封闭范围内同名的所有变量、方法或类型。如果一个实体被遮蔽,你就不能用它的简单名称来引用它;根据实体的不同,您根本无法引用它:
Java 语言(一种计算机语言,尤用于创建网站)
// Base class
class GeeksForGeeks {
static String sentence = "I don’t know.";
public static void main(String[] args) {
// shadows static field
String sentence = "I know!";
// prints local variable
System.out.println(sentence);
}
}
尽管通常不鼓励阴影,但一个常见的习惯用法确实涉及阴影。构造函数经常重用类中的字段名作为参数名来传递命名字段的值。这个习惯用法并非没有风险,但是大多数 Java 程序员都认为风格上的好处大于风险:
Java 语言(一种计算机语言,尤用于创建网站)
class Shirt {
private final int size;
// Parameter shadows Shirt.size
public Shirt(int size) {
this.size = size;
}
}
遮蔽如果两者都在作用域内,则变量遮蔽同名类型:如果在允许变量和类型的地方使用名称,则引用该变量。类似地,一个变量或一个类型可以隐藏一个包。模糊是唯一一种名称重用,其中两个名称位于不同的名称空间:变量、包、方法或类型。如果一个类型或一个包是模糊的,您不能通过它的简单名称来引用它,除非在语法只允许它的命名空间中有一个名称的上下文中。遵守命名约定在很大程度上消除了模糊
Java 语言(一种计算机语言,尤用于创建网站)
public class Obscure {
// Obscures type java.lang.System
static String System;
public static void main(String[] args) {
// Next line won’t compile:
// System refers to static field
System.out.println("hello, obscure world!");
}
}
版权属于:月萌API www.moonapi.com,转载请注明出处