1. 程式人生 > >java中子類是否可以訪問父類的私有屬性

java中子類是否可以訪問父類的私有屬性

首先子類是無法繼承父類的私有屬性,也無法直接訪問父類的私有屬性。

但如果父類中有對私有屬性的get和set的方法,而且是public的修飾的方法,

子類在繼承父類的同時,也繼承了帶有public修飾的set和get方法,所以可以通過以下方式子類可以訪問到父類的私有屬性。

package test;

class Person{
	private String name;
	public Integer age;
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	
	
}

class Student extends Person{
	
}

public class Test {
	public static void main(String[] args) {
		Student s = new Student();
		
		s.age = 12;
		s.setName("小明");
		
		String name = s.getName();
		System.out.println("name = "+ name);
		
	}
}

輸出結果截圖:

通過呼叫子類中從父類那裡繼承的set和get方法來訪問父類中私有屬性name。

但是要記住,子類並非繼承到父類的私有屬性name,子類只是繼承了父類的非私有屬性,比如以上例子的 age 屬性。

雖然子類可以通過以上的方法可以訪問父類的私有屬性,但是在做java題時,一般說子類可以訪問父類的私有屬性這些說法都是錯誤的。

要注意一點,如果父類中沒有對私有屬性的 get 和 set 方法或者其他對私有屬性操作的方法,又或者這些方法都被private修飾,

這樣子類是無法訪問到父類的私有屬性的。

相關推薦

關於模板中,子無法訪問成員問題的解決方法

問題: 今天研究資料結構,按著書敲程式碼,發現子類中直接呼叫父類成員居然無法通過編譯。 看了好久都沒發現問題,嘗試將父類private屬性改為public,發現也是不行。 解決辦法: 然後我想著用域作

java中子是否可以訪問私有屬性

首先子類是無法繼承父類的私有屬性,也無法直接訪問父類的私有屬性。 但如果父類中有對私有屬性的get和set的方法,而且是public的修飾的方法, 子類在繼承父類的同時,也繼承了帶有public修飾的set和get方法,所以可以通過以下方式子類可以訪問到父類的私有屬性。

Java訪問私有成員變量

私有成員變量 數列 屬性和方法 訪問 標識符 不同的 不可見 重載 一份 /**子類會繼承父類所有的屬性和方法。 * 但是根據不同的權限標識符,子類不可見父類的私有變量,但可以通過父類的公共方法訪問私有變量 * 所以對於重名變量,子類和父類都各有一份。 * 對於子類和父類中

java內部類中間可以用super訪問私有方法

A B是兩個內部類 @Test public void testttt(){ new B().bFunc(); } class A { pr

JAVA中子繼承了私有屬性方法了嗎?

一、繼承知識點簡單梳理 1、繼承會獲得父類的屬性和方法,子類還能有自己的屬性方法。       開閉原則:對修改關閉,對擴充套件開啟。 2、JAVA支援單繼承(一個子類只能有一個直接父類)、支援多重繼承(A extends B,B extends C)。       JAV

Java中子能否繼承私有屬性和方法

Java中子類繼承父類的私有屬性和方法 寫在前面: 已經正式從事java開發一年了,在寫一個demo的時候,突然發現繼承這塊的知識,以前都沒有注意到這些,原來自己掌握的很淺薄。 通過書本看到子類擁有父類的所有屬性和方法,於是寫程式去驗證,發現父類的私有屬性和方法,子類是不能訪問的

關於Java中子調用方法

pub java return 調用方法 類的方法 類繼承 main str pack 當一個類繼承於另一個類,子類中沒有父類的方法時。用子類的對象調用方法時,會首先在子類中查找,如果子類中沒有改方法,再到父類中查找。當一個方法只在父類中定義時,調用該方法時會使用父類中的屬

Java非靜態內部類和靜態內部類,訪問的非靜態和靜態成員變數及成員函式

 public class Test { // Not static variable private int mAge = 10; // Static variable private static int mId = 1; // Single inst

java 建構函式】為什麼子一定要訪問中的建構函式

子類的所有建構函式中的第一行,其實都有一條隱身的語句super(); 解釋: super()表示父類的建構函式並會調用於引數相對應的父類中的建構函式。子類中,它在呼叫父類中空引數的建構函式。因為子類繼承父類,會繼承到父類中的資料,所以必須要看父類是如何對自己的資料進行初始化的。所以子類在進行物件初始化時,先呼

java中子會繼承的構造方法嗎?

宣告:本人剛接觸java不久,如果理解的哪裡有錯誤或偏差,歡迎大家指正(希望大家帶著批判的眼光來看這篇文章)。 java中子類能繼承父類的構造方法嗎?帶著這個疑問我們首先來看個例子: //B類繼承A類 public class B extends A {

java之中的四種訪問許可權和子如何繼承特性

Public:對所有類可見 Protected:對同一包中的類,和子類可見 Private:僅對類本身可見         Default:對同一包中的類可見 為了理解方便,可見的意思也就是可以使用這個特性(域,方法,類),對子類可見就是子類也具有這些特性。但是繼承的時候,

Java虛擬機器原理圖解》1.3、class檔案中的訪問標誌、索引、索引、介面索引集合

講完了class檔案中的常量池,我們就相當於克服了class檔案中最麻煩的模組了。現在,我們來看一下class檔案中緊接著常量池後面的幾個東西:訪問標誌、類索引、父類索引、介面索引集合 訪問標誌、類索引、父類索引、介面索引集合 在class檔案中的位置

C++ 繼承 3--私有派生下的子訪問公有、私有、保護成員

#include <iostream> using namespace std; /*--------------------------------- 10私有派生 ---------------------------------*/ class

關於protected在子創建對象無法訪問protected方法或成員

.cn logs alt ack 對象 extends 允許 javase ref 子類(父類的外部包)中訪問父類的protetcted屬性或者方法,是不可以通過創建父類對象調用的。註意:此處不討論同包下的父類子類,因為同包下所有類都可訪問protected屬性或者方

JavaSE8基礎 當與子中的成員變量重名了,使用super.名字 來訪問的成員變量

public xtend tca ima his window logs java brush os :windows7 x64 jdk:jdk-8u131-windows-x64 ide:Eclipse Oxygen Release (4.7.0)

C#中子調用的實現方法

地址 public static evel ott word文檔 ase 正則表達式 跑步 本文實例講述了C#中實現子類調用父類的方法,分享給大家供大家參考之用。具體方法如下: 一、通過子類無參構造函數創建子類實例 創建父類Person和子類Student。publi

JavaScript中子調用方法的實現

lee code java ood left 生成 解決 宋體 PE 一、前言 最近在項目中,前端框架使用JavaScript面向對象編程,遇到了諸多問題,其中最典型的問題就是子類調用父類(super class)同名方法,也就是如C#中子類中調用父類函數Base.**。

(C++)在訪問一個中的私有成員變數

通過公共函式為私有成員賦值 #include <iostream> using namespace std; class Test { privat

C++模板中如何正確的訪問同是模板的中的成員?

1 C++類模板中如何正確的訪問同是類模板的父類中的成員(g++編譯器)? 先看如下程式碼: #include <iostream> using namespace std; template < typename T > class

JAVA學習筆記 物件的上轉型物件(子物件當作物件來使用)

  世界萬物無非就是吃喝玩樂繁衍生息,傳宗接代是重中之重,這樣長久以來就構成了我們地球上的生態系統,java也是這樣,只不過這裡面更加直接和純粹,就用學生和人類做一下例子,學生一定是人類對吧?(苗紅根正的當代優秀青年不相信怪力亂神)所以說人類一定就是學生的父類,學生就是人類的子類。大圓之中