介绍
JAVA 【引用类型】和【对象类型】在【继承】中的异同,这个问题自己整理过N次,也被人当菜鸟问过N次。所以,在此简单整理一下,以供大家分享。
在继承关系中,一般成员变量是根据引用类型
在继承关系中,静态成员变量是根据引用类型
在继承关系中,一般方法是根据对象类型
在继承关系中,静态方法是根据引用类型
注意
静态成员变量,静态方法是基于类的,本文为了测试观察,所以,会用对象去引用静态成员变量和静态方法。
Super Class:
package shuai.study.inherit;
public class SuperClass {
public String commonString = "SuperClass Common String";
public static String staticString = "SuperClass Static String";
public int otherCommonInt = 0;
public static int otherStaticInt = 10;
public void commonMethod() {
System.out.println("SuperClass Common Method: " + commonString);
}
public static void staticMethod() {
System.out.println("SuperClass Static Method: " + staticString);
}
public void otherCommonMethod() {
System.out.println("SuperClass Other Common Method: " + otherCommonInt);
}
public static void otherStaticMethod() {
System.out.println("SuperClass Other Static Method: " + otherStaticInt);
}
}
Suber Class:
package shuai.study.inherit;
public class SuberClass extends SuperClass {
public String commonString = "SuberClass Common String";
public static String staticString = "SuberClass Static String";
@Override
public void commonMethod() {
System.out.println("SuberClass Common Method: " + commonString);
}
public static void staticMethod() {
System.out.println("SuberClass Static Method: " + staticString);
}
}
Test Class:
package shuai.study.inherit;
public class Test {
public static void main(String[] args) {
SuperClass superClass = new SuberClass();
// Common member variable is according to quote type
System.out.println(superClass.commonString);
// Static member variable is according to quote type
// Generally we invoke static member as SuperClass.staticString, because static method & variable is based on class
System.out.println(superClass.staticString);
// Common method is according to object type
superClass.commonMethod();
// Static method is according to quote type
// Generally we invoke static method as SuperClass.staticMethod(), because static method & variable is based on class
superClass.staticMethod();
System.out.println("==================================================");
SuberClass suberClass = new SuberClass();
// Inherit member variable from super class
System.out.println(suberClass.otherCommonInt);
System.out.println(SuberClass.otherStaticInt);
// Inherit method from super class
suberClass.otherCommonMethod();
SuberClass.otherStaticMethod();
// Self method
suberClass.commonMethod();
SuberClass.staticMethod();
}
}
Output:
SuperClass Common String
SuperClass Static String
SuberClass Common Method: SuberClass Common String
SuperClass Static Method: SuperClass Static String
==================================================
0
10
SuperClass Other Common Method: 0
SuperClass Other Static Method: 10
SuberClass Common Method: SuberClass Common String
SuberClass Static Method: SuberClass Static String