1. 程式人生 > >JAVA中子類繼承了父類的私有屬性方法了嗎?

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

一、繼承知識點簡單梳理

1、繼承會獲得父類的屬性和方法,子類還能有自己的屬性方法。

      開閉原則:對修改關閉,對擴充套件開啟。

2、JAVA支援單繼承(一個子類只能有一個直接父類)、支援多重繼承(A extends B,B extends C)。

      JAVA不支援多繼承,原因:如果兩個父類有相同的方法,那麼子類繼承父類呼叫這個相同的方法的時候,會出現不    確定性,即二義性。多繼承在JAVA中通過介面來實現。

3、this()呼叫子類的構造方法,super()呼叫父類的構造方法。

4、重寫:方法名相同,引數列表相同,返回型別相同。且子類的修飾許可權要大於父類的修飾許可權。

      過載:方法名相同,引數列表不同,與返回值型別無關。

二、

        子類繼承父類,子類擁有父類所有的屬性和方法,但是父類的私有屬性和私有方法,子類是不能訪問的,當然一些父類的私有屬性可能可以通過相應的方法訪問到,但是私有的方法似乎不能簡單的訪問,這裡暫不考慮Java反射機制。在一個子類被建立的時候,首先會在記憶體中建立一個父類物件,然後在父類物件外部放上子類獨有的屬性,兩者合起來形成一個子類的物件。子類物件確實擁有父類物件中所有的屬性和方法,但是父類物件中的私有屬性和方法,子類是無法訪問到的,只是擁有,但不能使用。所以子類物件是絕對大於父類物件的,所謂的子類物件只能繼承父類非私有的屬性及方法的說法是錯誤的,可以繼承,只是無法訪問到而已。

        不能繼承,子類只能在父類中寫一個public的get方法來獲取父類中的private屬性,子類就呼叫父類的get方法來獲取私有屬性。

	//  封裝 javabean
	public class Person{  
	    // 屬性私有化
		private String name;    
		// 無參構造方法
		public Person(){
		}
		// 公有的set get
		public Person(String name){  
			this.name = name;  
		}   
		public void setName(String name){  
			this.name = name;  
		}     
		public String getName(){  
			return name;  
		}  
	}  
	//學生類 繼承
    public class Student extends Person{    
        public Student(String name){  
            super(name);  
        }  
    }  	
	// 測試類
    public class TestStudent{  
        public static void main(String[] args){  
            Student mStudent = new Student("張三");  
            String mName = mStudent.getName();  
            System.out.println("Name is : " + mName);     
            mStudent.setName("李四");  
            mName = mStudent.getName();  
            System.out.println("Name is : " + mName);  
              
        }  
    }