Home  >  Article  >  Java  >  An overview of hiding and overriding in Java and the differences between them

An overview of hiding and overriding in Java and the differences between them

php是最好的语言
php是最好的语言Original
2018-08-06 14:39:032176browse

I have learned polymorphism in the past two days, which naturally involves the rewriting of methods. In the process of the author messing around with the code, I found that the error type mentioned "This static method cannot hide the instance method from Fu" (as shown below), so I learned that in addition to overwriting (rewriting), there is also hiding. After searching various information, I finally found a more detailed article, which solved a lot of my doubts. Forward it, you may want to come back and read it in the future.

An overview of hiding and overriding in Java and the differences between them

1. Compile-time type and run-time type

Java reference variables have two types, one is Compile-time type, one is the run-time type

Compile-time type: Determined by the type used when declaring the variable

Run-time type: Determined by the type of object pointed to by the variable

If the compile-time type and run-time type are inconsistent, so-called polymorphism will occur. Because a subclass is actually a special parent class, Java allows a subclass object to be directly assigned to a parent class reference variable without any type conversion, or is called upward conversion, which is automatically completed by the system.

For example, Father f = new Son(); Son is a subclass of Father

When the variable f is referenced, the compile-time type and the run-time type will be inconsistent. The compile-time operation is of the Father type. When it is of type Son

When the compile-time type and run-time type of the variable are inconsistent, when the instance of the object it refers to is accessed through the variable, the value of the instance variable is determined by the type in which the variable is declared.

When accessing a method of the object it refers to through a variable, the behavior of the method is determined by the actual type of the referenced object.

2. Hiding and covering

Overwriting: The subclass overrides the method of the parent class, requiring that the method name and parameter type are exactly the same (the parameters cannot It is a subclass), the return value and exception are smaller or the same as the parent class (that is, it is a subclass of the parent class), and the access modifier is larger than or the same as the parent class.

Override is for instance methods

Methods cannot be cross-covered: subclass instance methods cannot override static methods of parent classes;

                  Static methods of a class cannot override instance methods of the parent class (an error occurs during compilation)

Hide: The parent class and the subclass have attributes or methods with the same name (there is only one form of method hiding , that is, when the parent class and the subclass have the same static method), the attribute or method of the parent class with the same name disappears in form, but actually still exists.

Hiding is for static methods and member variables (static variables and instance variables)

(1) When hiding occurs, what class the declared type is, call Properties or methods of the corresponding class, and no dynamic binding will occur

(2) Properties can only be hidden, not overwritten

(3) Variables can be cross-hidden: sub Class instance variables/static variables can hide the instance/static variables of the parent class

3. The difference between hiding and overwriting

(1) The hidden attributes are in the child After the class is forced to be converted to the parent class, the attributes in the parent class are accessed

When there is no forced conversion, the subclass needs to access the attributes of the parent class using the super keyword

(2) For overridden methods, after the subclass is forced to convert to the parent class, the method of the subclass itself will still be called.

If the subclass wants to access the method of the parent class, it can use the super keyword

Related articles:

Overview of the deeper method of overriding equals in java

Introduction to overload and override in PHP and JAVA

The above is the detailed content of An overview of hiding and overriding in Java and the differences between them. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn