Java基礎筆記 -------------面向對象上(三大特性)

面向對象三個特性:繼承(Inheritence)、封裝(Encapsulation)、多態(Polymorphism).

1、封裝(Encapsulation):

類包含了數據與方法,將數據與方法放在一個類中就構成了封裝(通常來講,將屬性私有化,而且生成settergetter方法)。它指的是將對象的狀態信息隱藏在對象內部,不容許外部程序直接訪問對象的內部信息,而是經過該類所提供方法來實現對內部信息的操做和訪問。把隱藏的東西隱藏,將該暴露的東西暴露.通常是經過訪問控制符完成封裝。java

Java中的訪問權限控制符有四個. 
做用域         當前類          同一package           子孫類                其餘package 
public              √                    √                           √                             √ 
protected         √                    √                            √                            × 
friendly            √                    √                            ×                            × 
private             √                     ×                            ×                             × 

沒有時默認爲friendly,如構造函數等~

在Java語言中有4種訪問修飾符:package(默認)、private、public和protected.
1。package是默認的保護模式,又叫作包訪問,沒有任何修飾符時就採用這種保護模式。包訪問容許域和方法被同一個包內任何類的任何方法訪問。(包內訪問)
2。private標識的訪問模式,表示私有的域和方法只能被同一個類中的其餘方法訪問,實現了數據隱藏;必要時,能夠經過方法訪問私有變量。(類內訪問)
3。public修飾符用於暴露域和方法,以便在類定義的包外部能訪問它們。對包和類中必要的接口元素,也須要使用這個級別;main()方法必須是public的,toString()方法也必須是public的。通常不會用public暴露一個域,除非這個域已經被聲明爲final。(跨包訪問)
4。protected修飾符提供一個從包外部訪問包(有限制)的方法。在域和方法前增長protected修飾符不會影響同一個包內其餘類和方法對它們的訪問。要從包外部訪問包(其中含有protected成員的類),必須保證被訪問的類是帶有protected成員類的子類。也就是說,但願包中的一個類被包以外的類繼承重用時,就可使用這個級別。通常應該慎用。(包中類被包外類繼承重用)
函數

1.1、對象在堆中的分配:

new關鍵字所作的工做:學習

爲對象開闢內存空間
調用類的構造方法
將生成的對象的地址返回this

方法與屬性的分配:spa

若是一個類包含了屬性和方法,那麼該類的每個對象都有本身的屬性,可是不管有多少個對象,這些對象共享一個方法。.net

1.2、封裝中的構造方法(重載):

重載:code

構造方法重載時,只需看參數便可。orm

使用this()對象

在一個構造方法中調用另一個構造方法,可使用this()this()中的參數根據調用的構造函數肯定。this()語句必須做爲構造方法的第一條語句blog

2、繼承(Inheritence):

Java是單繼承的,意味着一個類只能繼承一個父類,使用extends關鍵字。

2.1、繼承中的構造方法:

繼承關係中構造方法的調用:

生成子類對象時,Java默認地首先調用父類的不帶參數的構造方法,並執行該構造方法,生成父類的對象。接下來纔是調用子類的構造方法,生成子類的對象。(便是想要生成子類對象,必須先生成父類的對象,沒有父類的對象就沒有子類的對象)

package com.blog;
/**
 *基類
 */
class SuperTest {
	private String age;

	public SuperTest(String age) {
		this.age = age;
		System.out.println(this.age);
	}

	public String getAge() {
		return age;
	}

	public void setAge(String age) {
		this.age = age;
	}
}
/**
 *導出類
 */
public class Test extends SuperTest{
	private String name;
	public Test(String age,String name) {
		super(age); //調用基類的構造方法.
		this.name = name;
		System.out.println(this.name);
	}
	public static void main(String[] args) {
		Test test = new Test("50", "itcast");
	}
}
//output:50
         itcast
 ~~//


使用super關鍵字:

super表示對父類對象的引用。

使用了super顯示的調用父類的某個構造方法後,那麼在執行的時候就尋找super()對應的構造方法而再也不尋找父類的不帶參數的構造方法。super必須做爲構造方法的第一條執行語句。

2.2、繼承中父類與子類的關係:

父類有的,子類也有
父類沒有的,子類能夠有
父類有的,子類能夠改變

2.3、繼承中須要注意的:

構造方法不能被繼承
方法和屬性能夠被繼承
子類的構造方法隱式地調用父類的無參構造方法,即java.lang.Object是被默認繼承的.
當父類沒有不帶參數的構造方法時,子類須要使用super關鍵字來顯示調用父類的構造方法。super指的是父類的引用
super關鍵字必須是構造方法中的第一句。


2.4、繼承中的方法重寫:

當兩個方法造成重寫關係時,能夠在子類中經過super關鍵字調用父類被重寫的方法。此時的super關鍵字沒必要放在第一句,而是根據邏輯決定。

3、多態(Polymorphism):

多態指的是父類型的引用能夠指向子類的對象。(蘋果是水果,足球是球).Java中的引用變量有兩種, 一種是編譯時類型由聲明該變量時使用的類型決定,還有一種是運行期類型由實際賦給變量的對象決定.若是編譯時和運行時類型不一致,就會出現多態. 

Parent p = new Child();

p.execute();

3.1、使用多態調用方法:

當使用多態調用方法時,首先檢查父類中是否有被調用的方法,若是沒有則編譯出錯;若是有,再去調用子類的方法。

3.2、多態中的兩種類型轉換:

向上類型轉換(upcast):將子類型轉換成父類型。對於向上類型轉換,不須要顯示指定:

Parent p = new Child();

向下類型轉換(downcast):將父類型轉換爲子類型。對於向下類型轉換,必需要顯示指定,使用強制類型轉換:

Parent p = new Child();

Child child = (Child)p;

如下的編譯不會出錯,運行時頗有能報錯(ClassCastException):

Parent p = new Parent();

Child child = (Child)p;

若是用instaceof判斷一下是否屬於類或者子類的一個實例.

  if(child instaceof Parent){

     Child child = (Child)p;

  }

4、繼承和組合

     繼承是實現類重用的重要手段,可是它會帶來一個大的壞處:破環封裝.相比之下,組合也是實現類重用的方式.而採用組合方式可以更好的提供類的封裝.

5、Java初始化順序

  ps:Java中面向對象思想其實不難理解,可是有的時候又很是讓人頭疼.我只是總結一點經常使用的知識點.其實還有不少本身到如今還搞不明白.計算機將現實中的東西抽象出來的思惟.本身理解的還不夠透徹....

----------------------- JavaEE/物聯網技術交流java培訓、java學習型技術博客、期待與您交流! ----------------------

詳情請查看:http://edu.csdn.net/heima

相關文章
相關標籤/搜索