鱼C论坛

 找回密码
 立即注册

java Overriding and Hiding Methods

已有 843 次阅读2013-6-20 17:00 |个人分类:java| java

Instance Methods

An instance method in a subclass with the same signature (name, plus the number and the type of its parameters) and return type as an instance method in the superclass overrides the superclass's method.

The ability of a subclass to override a method allows a class to inherit from a superclass whose behavior is "close enough" and then to modify behavior as needed. The overriding method has the same name, number and type of parameters, and return type as the method it overrides. An overriding method can also return a subtype of the type returned by the overridden method. This is called acovariant return type.

When overriding a method, you might want to use the @Override annotation that instructs the compiler that you intend to override a method in the superclass. If, for some reason, the compiler detects that the method does not exist in one of the superclasses, it will generate an error. For more information on @Override, see Annotations.

Class Methods

If a subclass defines a class method with the same signature as a class method in the superclass, the method in the subclass hidesthe one in the superclass.

The distinction between hiding and overriding has important implications. The version of the overridden method that gets invoked is the one in the subclass. The version of the hidden method that gets invoked depends on whether it is invoked from the superclass or the subclass. Let's look at an example that contains two classes. The first is Animal, which contains one instance method and one 

class method:

public class Animal
 { 
  public static void testClassMethod()
 { 
  System.out.println("The class" + " method in Animal."); 
 
  public void testInstanceMethod() 
{
System.out.println("The instance " + " method in Animal."); 
  }
 }

The second class, a subclass of Animal, is called Cat:

public class Cat extends Animal
 {
  public static void testClassMethod() 
{
 System.out.println("The class 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(); 
  myAnimal.testInstanceMethod(); 
 
}

The Cat class overrides the instance method in Animal and hides the class method in Animal. The main method in this class creates an instance of Cat and calls testClassMethod() on the class and testInstanceMethod() on the instance.

The output from this program is as follows:

The class method in Animal.
 The instance method in Cat.

As promised, the version of the hidden method that gets invoked is the one in the superclass, and the version of the overridden method that gets invoked is the one in the subclass.

Modifiers

The access specifier for an overriding method can allow more, but not less, access than the overridden method. For example, a protected instance method in the superclass can be made public, but not private, in the subclass.

You will get a compile-time error if you attempt to change an instance method in the superclass to a class method in the subclass, and vice versa.

Summary

The following table summarizes what happens when you define a method with the same signature as a method in a superclass.

Defining a Method with the Same Signature as a Superclass's Method
 Superclass Instance MethodSuperclass Static Method
Subclass Instance MethodOverridesGenerates a compile-time error
Subclass Static MethodGenerates a compile-time errorHides
Note: In a subclass, you can overload the methods inherited from the superclass. Such overloaded methods neither hide nor override the superclass methods—they are new methods, unique to the subclass.

路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 立即注册

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-16 20:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

返回顶部