Java父類繼承中的static和final
阿新 • • 發佈:2018-11-11
1、父類中staitic修飾的靜態方法,不能覆蓋、不能繼承。
2、父類中staitic修飾的變數或常量,能覆蓋、不能繼承。
static修飾的變數和方法,只屬於類本身,不屬於物件;當宣告一個物件時,並不產生static變數和方法的拷貝。也就是說,用static修飾的變數和方法在類載入的時候,會分配一塊儲存空間,所有此類的物件都可以操控此塊儲存空間;
注意:當子類沒有與父類同名的static變數(或方法時),子類的物件也可操控這塊記憶體空間。但是,子類並沒有繼承父類中static修飾的變數和方法。這是因為static修飾的變數和方法是屬於父類本身的。
3、父類中final修飾的方法,不能覆蓋,但可繼承。
程式碼示例:
package com.jdk; /** * Created by Liuxd on 2018-11-02. */ public class TestExtendsClass { public static void main(String[] args) { ParentClass parentClass = new ChildClass(); System.out.println(); int pFResult = ParentClass.plus(3,2); int pResult = ParentClass.add(3,2); int cResult = ChildClass.add(3,2); int pMResult = parentClass.minus(2,3); System.out.println("父類靜final方法計算結果:" + pFResult); System.out.println("父類靜方法計算結果:" + pResult); System.out.println("子類靜方法計算結果:" + cResult); System.out.println("父類final方法計算結果:" + pMResult); System.out.println("父類靜態變數num:" + ParentClass.num); System.out.println("子類靜態變數num:" + ChildClass.num); } } class ParentClass { public static final int num = 1; ParentClass() { System.out.println("執行父類無引數構造方法"); } static int add(int i, int j) { return i + j; } static final int plus(int i, int j) { return i + j; } final int minus(int i, int j) { return i - j; } } class ChildClass extends ParentClass { public static final int num = 2; ChildClass() { System.out.println("執行子類無引數構造方法"); } // @Override 無法繼承,編譯時出錯 static int add(int i, int j) { return i * j; } // 無法繼承,編譯時出錯 // int plus(int i, int j) { // return i + j; // } // 無法繼承,編譯時出錯 // int minus(int i, int j) { // return i - j; // } }
輸出結果:
執行父類無引數構造方法
執行子類無引數構造方法父類靜final方法計算結果:5
父類靜方法計算結果:5
子類靜方法計算結果:6
父類final方法計算結果:-1
父類靜態變數num:1
子類靜態變數num:2