Java語言之物件導向—類與物件(上)
物件導向
物件導向簡介:
程式導向程式設計少了可重複用性設計
三大特徵
- 封裝性:就是把客觀事物封裝成抽象的類,並且類可以把自己的資料和方法只讓可信的類或者物件操作,對不可信的進行資訊隱蔽。簡而言之就是:內部操作對外部而言不可見(保護性)
- 繼承性:首先繼承是一種能力它可以使用現有類的所有的功能,並在無需重新編寫原來的類的情況下對這些功能進行擴充套件。(必須滿足is-a原則,賦用)
- 多型性:一個類例項的想同方法在不能情形有不能的表現形式。多型機制是具有不同內部結構的物件可以共享相同的外部介面。(利用多型可以得到良好的設計)
物件導向名詞擴充套件 - OOA:物件導向分析
- OOD:物件導向設計
- OOP:物件導向程式設計
- 物件導向最大的特徵:可以對現實生活進行抽象。
類與物件的定義與使用
類指的是共性的概念(人類),而物件是類的一個具體的可以使用的事物(某個人)。
首先產生類(類是產生物件的藍圖),而後產生物件。物件所有的行為一定在類中進行了完整的定義。(屬性和行為一致)
類的組成:
屬性:描述物件的具體特點
方法:操作的行為
語法:
class 類名稱{
屬性1;
屬性2;
屬性n……;
方法1(){}
方法2(){}
方法(){}
}
class Person{
public String name;
public int age;
public Person(String name,int age){
this.name = name ;
this.age = age ;
}
public String getPersonInfo(){
return "姓名:"+this.name+",年齡:"+this.age;
}
}
類中定義的普通屬性與方法不在由主類直接呼叫,而是通過該類的物件的呼叫。
產生物件的語法:
類名稱 物件名稱=new 類名稱()
Person p1 = new Person();
Person p2 = new Person("Steven",25);
物件記憶體分析:
堆記憶體:方法的區域性變數,方法形參,引用
堆記憶體(所有方法共享記憶體):陣列物件、所有類的物件
當看見關鍵字new,一定在堆記憶體上開闢了新的空間
物件的引用傳遞:多個棧記憶體指向同一個堆記憶體
物件的空指標問題:所有引用資料變數必須先賦值後使用,否則會丟擲NullPointerException(執行時異常)
封裝和構造方法
private實現封裝
若類中屬性直接暴露給物件操作,存在不安全(由於物件可以直接操作類中屬性,無法限制屬性是否正常設定)
使用private實現堆屬性封裝
修飾屬性或方法,表示該屬性和方法只能在本類中使用,其他類無法直接使用private封裝的屬性或方法。
defalut許可權
class Person{
String name
}
Person類與name屬性都是default許可權(包訪問許可權,在同一個 原始檔中可以訪問)
使用方法
若private封裝的屬性要被外部訪問,需要提供setter/getter方法
setter方法用於設定屬性值
getter方法用於取得屬性值
類的設計原則
- 編寫類時,所有屬性必須被private封裝
- 屬性要被外部訪問,必須定義相應的getter和setter方法
類的構造方法
定義:構造方法是在使用關鍵字new例項化新的物件時呼叫的方法
person per = new person
類名稱 物件引用 堆上開闢新空間 構造方法
構造方法特點 - 構造方法名稱必須與類名稱相同
- 沒有返回值型別說明
- 每個類至少存在一個構造方法無參構造(沒有明確定義,則系統自動生成一個無參構造)
構造方法作用
為類中屬性初始化,避免多次使用setter呼叫
方法過載:僅限於引數個數不同
this關鍵字
this表示構造方法
this(方法引數);
在構造方法首行使用this()表示呼叫本類的構造方法
this呼叫構造方法必須在構造方法首行
this呼叫構造方法不能成環
this表示本類普通方法
this.方法名稱(方法引數)
若在本類中呼叫本類方法,一般將this(尤其是在有繼承的情況,使用this可以明確是本類方法)
this表示當前物件
當前呼叫的屬性和方法是通過那個物件呼叫的,this就指代他。
static關鍵字
修飾本類屬性—成為靜態屬性(類屬性),所有物件共享此屬性值
非static屬性成為成員變數或物件屬性,每個物件都有此屬性且值都一樣
要描述國家著中共享屬性,可以使用static修飾屬性靜態屬性一般同過類名直接呼叫,所有該類物件共享此屬性值。
修飾本類方法
使用static修飾方法,稱為類方法,直接通過類名稱呼叫,與物件例項化無關。
靜態方法常見於工具方法。
eg:java.util.Arrays.sort();
System.arraycopy();
靜態方法不能訪問類中普通屬性。 靜態無物件
靜態方法可以訪問類中靜態屬性。
普通方法可以訪問類中靜態屬性。
修飾內部類
沒有外部類直接建立
相關文章
- Java物件導向——類與物件Java物件
- java物件導向(上)Java物件
- python物件導向思想(類與物件)Python物件
- JAVA物件導向--抽象類Java物件抽象
- Java物件導向詳解-上Java物件
- 物件導向(上)物件
- Java物件導向Java物件
- [Java物件導向]Java物件
- Java — 物件導向Java物件
- JAVA物件導向基礎--物件導向介紹Java物件
- python中物件導向_類_物件的概念與定義Python物件
- 課時37:類與物件:物件導向程式設計物件程式設計
- 物件導向與程式導向物件
- 程式導向與物件導向物件
- Python物件導向(上)Python物件
- 物件導向-物件導向思想物件
- python-程式導向、物件導向、類Python物件
- java物件導向(中)Java物件
- JAVA物件導向思想Java物件
- [Java物件導向]finalJava物件
- Java物件導向(一)Java物件
- java的物件導向Java物件
- Java 物件導向概述Java物件
- 談談我對物件導向以及類與物件的理解物件
- Java:Java的物件導向Java物件
- Python如何設計物件導向的類(上)Python物件
- TypeScript與物件導向TypeScript物件
- Java基礎 --- 物件導向Java物件
- Java物件導向--多型Java物件多型
- [Java物件導向]static方法Java物件
- JAVA物件導向之多型Java物件多型
- JAVA物件導向基礎Java物件
- 二、Java之物件導向Java物件
- java物件導向繼承Java物件繼承
- 物件導向 -- 類的組合物件
- C++ 類(物件導向初探)C++物件
- PHP 物件導向 (十一)反射類PHP物件反射
- 物件導向之內部類物件