首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

Java 繼承機制深度解析:子類與父類的訪問權限實戰

     編輯:Java 程式設計入門

繼承的核心定義

在 Java 物件導向設計中,繼承是實現代碼復用的基石。子類不僅擁有自己聲明的成員,更能「繼承」父類的非私有成員變量與方法,彷彿這些成員原本就定義在子類中一般。這意味著子類的實例方法可以直接操作繼承來的成員變量,也能直接調用繼承來的方法,形成「完全意義上的成員」關係。

同一包結構下的繼承規則

當子類與父類位於同一個包時,繼承權限相對寬鬆:

  • 可繼承:protected、public、包私有(默認)修飾的成員變量與方法
  • 不可繼承:private 修飾的成員變量與方法
  • 繼承後的訪問權限保持不變

代碼實戰演示

// 父類 Parent.java
package com.b510;
public class Parent {
    private int numbera = 10;
    protected int numberb = 20;
    
    void sum() { numberb = numbera + numberb; System.out.println(numberb); }
    private int getNumbera() { System.out.println(numbera); return numbera; }
    public void print() { System.out.println("numberb+numbera=" + (numberb + numbera)); }
    protected void say() { System.out.println("Hello,i'm parent class!"); }
}

// 子類 SubClass.java
package com.b510;
public class SubClass extends Parent {
    void youYuan() { 
        System.out.println("子類不能繼承numbera,但能繼承numberb=" + numberb); 
    }
    protected void proFun() { System.out.println("子類中可以繼承numberb=" + numberb); }
    private void priFun() { System.out.println("這是private方法"); }
}

運行結果分析

Hello,i'm parent class!
30
numberb+numbera=40
子類中可以繼承numberb=30
子類不能繼承numbera,但能繼承numberb=30
這是子類中的友元方法

結論:同包下,子類無法繼承父類的 private 成員,但可自由使用 protected、默認、public 成員。

跨包結構下的繼承差異

當子類與父類不在同一包時,規則發生關鍵變化:

  • 可繼承:protected、public 成員
  • 不可繼承:private、包私有(默認/友元) 成員
  • 繼承成員的訪問權限保持不變
  • 子類可重寫(Override)父類的 protected、public 方法

跨包代碼示例

// 父類位於 package com
// 子類位於 package com.b510,需 import com.Parent
public class SubClass extends Parent {
    @Override
    protected void say() {
        System.out.println("這是重寫父類的protected方法,say(),還可以得到numberb=" + numberb);
    }
    // 其他方法同前...
}

跨包運行結果

這是重寫父類的protected方法,say(),還可以得到numberb=20
numberb+numbera=30
子類中可以繼承numberb=20
子類不能繼承numbera,但能繼承numberb=20
這是子類中的友元方法

注意:numberb 保持初始值 20,說明子類調用的是重寫後的 say(),且 sum() 方法(包私有)未被繼承,無法調用。

核心總結表

修飾符同包繼承跨包繼承
public✅✅
protected✅✅
default (包私有)✅❌
private❌❌

掌握這些規則,能幫助你設計清晰的類層級結構,避免因訪問權限誤解導致的編譯錯誤或運行時異常。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved