临漳seo整站排名,网站开发流程php,最近有哪些新闻,什么平台可以发广告免费文章目录 105. Java 继承 - 静态方法的隐藏**静态方法与实例方法的区别****示例代码****程序输出解释****静态方法与实例方法的调用区别****总结** 105. Java 继承 - 静态方法的隐藏
在 Java 中#xff0c;当子类定义了一个与父类静态方法签名相同的静态方法时#xff0c;子… 文章目录 105. Java 继承 - 静态方法的隐藏**静态方法与实例方法的区别****示例代码****程序输出解释****静态方法与实例方法的调用区别****总结** 105. Java 继承 - 静态方法的隐藏
在 Java 中当子类定义了一个与父类静态方法签名相同的静态方法时子类中的静态方法将 隐藏 父类中的静态方法。与实例方法的重写不同静态方法是通过类本身来调用的因此它们的调用与对象的实例化状态无关。
静态方法与实例方法的区别
实例方法的重写当子类重写父类的实例方法时调用的是子类版本的实例方法即使使用的是父类类型的引用变量实际调用的是子类的实例方法。静态方法的隐藏当子类定义一个与父类静态方法签名相同的静态方法时调用的版本取决于方法是通过父类还是子类来调用的。即静态方法是根据调用它的类来确定的而不是根据实例对象。
示例代码
public class Animal {public static void testClassMethod() {System.out.println(The static method in Animal);}public void testInstanceMethod() {System.out.println(The instance method in Animal);}
}public class Cat extends Animal {public static void testClassMethod() {System.out.println(The static method in Cat);}public void testInstanceMethod() {System.out.println(The instance method in Cat);}public static void main(String[] args) {Cat myCat new Cat();Animal myAnimal myCat;// 调用静态方法Animal.testClassMethod(); // 输出The static method in AnimalCat.testClassMethod(); // 输出The static method in Cat// 调用实例方法myAnimal.testInstanceMethod(); // 输出The instance method in CatmyCat.testInstanceMethod(); // 输出The instance method in Cat}
}程序输出解释
Animal.testClassMethod() 调用此时通过父类 Animal 来调用静态方法因为静态方法是通过类名来调用的因此调用的是 Animal 类中的 testClassMethod()输出“The static method in Animal”。Cat.testClassMethod() 调用此时通过子类 Cat 来调用静态方法输出的是子类 Cat 中的 testClassMethod()即输出“The static method in Cat”。实例方法的调用testInstanceMethod() 是实例方法因此无论通过 Animal 类型的引用变量 myAnimal 还是通过 Cat 类的实例变量 myCat 来调用它们都会调用 Cat 类中的 testInstanceMethod() 方法因为实例方法的重写是根据对象的实际类型来决定的。
静态方法与实例方法的调用区别
静态方法的调用静态方法是通过类来调用的而不是通过对象。因此调用静态方法时使用的是类名来决定调用哪个方法。如果父类和子类都有同名静态方法那么静态方法是 隐藏 的具体调用哪个版本的方法取决于调用者使用的是哪个类名。实例方法的调用实例方法的调用是根据实际对象的类型来决定的。如果子类重写了父类的实例方法那么实际调用的是子类的方法。
总结
静态方法的隐藏如果子类定义了一个与父类静态方法签名相同的静态方法子类的方法将隐藏父类的方法。静态方法是通过类名调用的调用哪个方法取决于类名而不是对象实例。实例方法的重写子类可以重写父类的实例方法并且在调用时调用的是实际对象的类型对应的方法即子类重写的方法。关键区别静态方法的版本由调用的类决定而实例方法的版本由实际对象的类型决定。
通过这个示例和详细的解释学员可以清楚地了解静态方法隐藏与实例方法重写的区别以及它们在实际编码中的应用。