1. 程式人生 > >靜態屬性和靜態方法可以被繼承,但沒有被重寫(overwrite)而是被隱藏

靜態屬性和靜態方法可以被繼承,但沒有被重寫(overwrite)而是被隱藏

靜態方法和屬性是屬於類的,呼叫的時候直接通過類名.方法名完成的,不需繼承機制就可以呼叫如果子類裡面定義了靜態方法和屬性,那麼這時候父類的靜態方法 或屬性稱之為“隱藏”,你如果想要呼叫父類的靜態方法和屬性,直接通過父類名.方法名或變數名完成,至於是否繼承一說,子類是有繼承靜態方法和屬性,但是 跟例項方法和屬性不太一樣,存在“隱藏”的這種情況。

多型之所以能夠實現是依賴於 繼承 介面和 重寫 、過載(繼承和重寫最為關鍵)。有了繼承和重寫就可以  實現父類的引用可以指向不同子類的物件。重寫的功能是:“重寫”後子類的優先順序要高於父類的優先順序,但是“隱藏”是沒有這個優先順序之分的。

靜態屬性、靜態方法和非靜態的屬性都可以被 繼承 和 隱藏  而不能夠被重寫,因此不能實現多型,不能實現父類的引用可以指向不同子類的物件。       非靜態的方法可以被繼承和重寫,因此可以實現多型。

##介面中的實現和類中的繼承是兩個不同的概念,因此不可以說實現介面的子類從介面那裡繼承了常量和方法
例證如下:
package com.etc;
public  class A//父類
{
    public static String str = "靜態屬性";
    public String name = "非靜態屬性";
    public static void sing()
    {
        System.out.println("靜態方法");
    }
   
    public void run()
    {
        System.out.println("非靜態方法");
    }
}
package com.etc;
public class B extends A //子類B
{
    public static String str = "B該改寫後的靜態屬性";
    public String name ="B改寫後的非靜態屬性";
    public static void sing()
    {
        System.out.println("B改寫後的靜態方法");
    }
}
package com.etc;
public class C extends A //子類C繼承A中的所有屬性和方法
{
}
package com.etc;
public class Test//測試類
{
    public static void main(String[] args)
    {
        C c = new C();
        System.out.println(c.name);
        System.out.println(c.str);
        c.sing();//輸出的結果都是父類中的非靜態屬性、靜態屬性和靜態方法,推出靜態屬性和靜態方法可以被繼承
       
        A c1 = new C();
        System.out.println(c1.name);
        System.out.println(c1.str);
        c1.sing();//結果同上,輸出的結果都是父類中的非靜態屬性、靜態屬性和靜態方法,推出靜態屬性和靜態方法可以被繼承
       
        B b = new B();
        System.out.println(b.name);
        System.out.println(b.str);
        b.sing();//結果都是子類的非靜態屬性,靜態屬性和靜態方法,這裡和非靜態屬性和非靜態類的繼承相同
       
       
        A b1 = new B();
        System.out.println(b1.str);//結果是父類的靜態屬性,說明靜態屬性不可以被重寫,不能實現多型
        System.out.println(b1.name);//結果是父類的非靜態屬性,說明非靜態屬性不可以被重寫,不能實現多型
        b1.sing();//結果都是父類的靜態方法,說明靜態方法不可以被重寫,不能實現多型
    }
}

相關推薦

靜態屬性靜態方法可以繼承沒有重寫overwrite而是隱藏

靜態方法和屬性是屬於類的,呼叫的時候直接通過類名.方法名完成的,不需繼承機制就可以呼叫如果子類裡面定義了靜態方法和屬性,那麼這時候父類的靜態方法 或屬性稱之為“隱藏”,你如果想要呼叫父類的靜態方法和屬性,直接通過父類名.方法名或變數名完成,至於是否繼承一說,子類是有繼承靜

java之靜態屬性靜態方法

person pri 技術分享 周期 銷毀 out 方法 class 屬性的區別 前言 靜態屬性和方法必須用static修飾符 靜態屬性和非靜態屬性的區別: 1、在內存中存放位置不同 所有帶static修飾符的屬性或者方法都存放在內存中的方法區 而非靜態屬性存放在內存

面向對象的靜態屬性靜態方法

ima alt 方法名 如果 func In public fun 調用 一,靜態屬性 靜態屬性時該類的所有對象共享的變量,任何一個該類的對象去訪問它時,取到的都是相同的值,同樣任何一個該類的對象去修改它時,修改的也是同一個變量 定義靜態屬性:訪問修飾符 static 靜

php面向對象中static靜態屬性靜態方法的調用

style 存放位置 需要 5.4 color UNC size 只有一個 面向對象 關於它們的調用(能不能調用,怎麽樣調用),需要弄明白了他們在內存中存放位置,這樣就非常容易理解了。靜態屬性、方法(包括靜態與非靜態)在內存中,只有一個位置(而非靜態屬性,有多少實例化對象,

7:靜態屬性靜態方法

在屬性或方法前面加 static 修飾,即可稱為靜態屬性/方法 普通屬性例項化之後放在例項物件上,靜態屬性則是放在類上; 可以不例項化類而直接訪問,不能通過一個類已例項化的物件訪問,直接使用類訪問:類名::$屬性名; 靜態屬性只能被初始化為直接量,不能使用表示式,不能

C++快速入門---靜態屬性靜態方法15

C++快速入門---靜態屬性和靜態方法(15)   靜態屬性和靜態方法 把一個或多個成員宣告為屬於某個類,而不是僅屬於該類的物件。 好處1:程式設計師可以在沒有建立任何物件的情況下呼叫有關的方法。 好處2:能夠讓有關的資料仍在該類的所有物件間共享。  

php——18-靜態屬性靜態方法static

靜態屬性和靜態方法(static) 靜態屬性或方法是和類相關的,而不是和類的某個特定的例項相關,因此這類屬性或方法也稱為“類屬性”或“類方法”; 靜態屬性和方法,在類被呼叫(類被建立或者類中的任何靜態

final關鍵詞 static靜態屬性靜態方法

現在有如下需求:我寫了一個類,你只可以使用,不可以繼承,也不能重寫其中的方法,如果實現?類或者方法一旦宣告final關鍵詞,那麼此類會有如下特點:帶有final關鍵詞的類,不能被繼承。帶有final關鍵詞的方法,不能被子類重寫。 finale關鍵詞宣告類,無法繼承。 1 final class a{

php靜態屬性靜態方法

在屬性,和方法前 加 static 修飾,這種稱為靜態屬性/ 靜態方法 靜態屬性 class Human { static public $head = 1; public function changeHead() {

php 靜態屬性靜態變量

屬性 9.png http 變量 ima image 靜態 blog 靜態屬性 php 靜態屬性和靜態變量

java中如何使用空參構造方法自動生成不同名字的對象使用非靜態屬性靜態屬性有什麽區別原因是什麽?如何理解static關鍵字

區別 關鍵字 內部 方法 屬性 count per setname person 空參構造自動生成對象時,使用非靜態的屬性 代碼: package com.swift; //使用無參構造方法自動生成對象,序號不斷自增 public class Person { p

面向物件-類屬性方法靜態方法

類屬性和類方法 目標 類的結構 類屬性和例項屬性 類方法和靜態方法 01. 類的結構 1.1 術語 —— 例項 使用面相物件開發,第 1 步 是設計 類 使用 類名() 建立物件,建立物件 的動作

將封裝的資料庫類改寫成靜態屬性方法來訪問

<?php class static_db{ private static $host; private static $username; private static $password; private static $db_name; private static $link; public f

Java靜態屬性靜態方法能否繼承的問題

開始正文之前的一個參考: 結論:java中靜態屬性和靜態方法可以被繼承,但是沒有被重寫(overwrite)而是被隱藏. 原因: 1). 靜態方法和屬性是屬於類的,呼叫的時候直接通過類名.方法名完成對,不需要繼承機制及可以呼叫。如果子類裡面定義了靜態方法和屬性,那麼

Java靜態屬性靜態方法、非靜態屬性、非靜態方法繼承問題簡單了解

java 靜態方法 靜態屬性 非靜態屬性 非靜態方法 package com.book.web.controller; /** * 父類 * @author liweihan * */ public class Parent { public String normalSt

靜態屬性方法

php中的類常量 即靜態方法為什麽會有靜態屬性只是為了方便不用實例化一個類,即可使用裏面的方法代碼練習class math{ static public function add($a,$b){ return $a+$b; }}$sum = new math();$sum

PHP裡邊用Static關鍵字來定義靜態屬性方法

<?php class person{        static$name="ajax123";//static宣告靜態屬性        static$age=25;//static宣告靜態屬性        static$address="北京";//

Java中靜態屬性靜態方法繼承重寫的那點破事

public class A { public static String staticStr = "A's static field"; public String nonStaticStr = "A's nonstatic field"

Java中子類是否可以繼承父類的static變數static方法以及父類的private屬性private方法

轉載自以下原文: 原文連結1 原文連結2 一、子類可以繼承父類的private屬性和private方法: 1、子類繼承父類,子類擁有了父類的所有屬性和方法。 程式驗證,父類的私有屬性和方法子類是無法直接訪問的。當然私有屬性可以通過public修飾的

【java】java反射機制動態獲取對象的屬性對應的參數值屬性按照字典序排序Field.setAccessible()方法的說明【可用於微信支付 簽名生成】

modifier 直接 this 字段值 1-1 讓我 toupper ima play 方法1:通過get()方法獲取屬性值 package com.sxd.test.controller; public class FirstCa{ private