今天來說說java面向對象的知識點~事實上。java在其發展過程中可以成功。非常大一部分原因是其面向對象的思想~
1、概念
如今來說面向對象思想。也不是什麼新的知識點了,我們知道如今非常多語言都有面向對象的思想了;當然我們還知道如今依然非常火的C語言。事實上還是面向過程的語言。包含近期一段時間也出現了非常多新的思想,比方面向函數,面向分布式,面向...等等一系列的東東,事實上這些都僅僅是一個概念而已~
在面向對象中。實際上還存在着三個基本的特性:
·封裝性:保證對外部不可見;
·繼承性:繼續發揚廣大。
·多态性:就屬于變來變去;
2、類與對象
好了,概念說完了。來說說類與對象吧。。
。
類:類是一組共性的産物,是同一類事物的集中表現。
對象:是一種個性的展現,是個體的産物。
這句話非常重要:類是對象的模闆。對象是類的執行個體
3、java中類的定義
java中定義類有兩種方式:public class和class
· 使用 public class 聲明的類必須與檔案名同樣,假設使用class 聲明的類能夠與檔案名不同
· 在一個*.java的檔案之中,僅僅能存在一個public class。可是能夠同一時候存在多個class的定義
· 僅僅要是定義類則要求每一個單詞的首字母大寫 ——> 約定
比方這邊的People.java檔案裡的定義:
package me.javen.oop;//包名
class Person { // 定義類
String name; // 定義屬性
int age; // 定義屬性
public void say() { // 定義方法
System.out.println("123");
}
}
public class People { // 定義類
public static void main(String[] args) {// 定義方法
}
}
4、java中使用類——>對象
那麼上面定義的類,怎麼來使用呢?
Person person = null;//在棧記憶體中聲明,此過程叫做聲明對象
person = new Person();//開辟相應的堆記憶體空間,此過程叫做執行個體化對象
事實上能夠寫成一條語句的,一般在開發中也是一條的~
即:Person person = new Person();
這邊是為了說明其記憶體結構才寫成兩條的。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsATOfd3bkFGazxCMx8VesATMfhHLlN3XnxCMwEzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5iYyMjYkNDNhFGMhFGZlFTN5EmNjVWY2MTN5UmMiJjZz8CXxMzLcdDMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjL2M3Lc9CX6MHc0RHaiojIsJye.png)
看下面程式:
public static void main(String[] args) {// 定義方法
Person person = null;
person = new Person();
//使用類中的屬性
person.name="Mr.稻帥";
person.age=24;
person.say(); //用法
}
這樣子,類和對象的基本使用就基本介紹完畢了。。
以下來介紹構造方法
5、構造方法
定義:在一個類中定義的方法名稱與類名稱同樣。且無傳回值聲明的方法,稱為構造方法。
還是看到剛剛的代碼:person = new Person();
事實上在new的過程中,new的是Person類的預設構造方法。
記住:在一個類中假設沒有明白的定義一個構造方法的話,則會自己主動生成一個無參的,什麼都不做的構造方法。假設類中存在構造方法,則在new的過程中就必須使用定義了的構造方法。
這句話對于小白,了解起來可能有點困難,分号前面的可能好了解一點..參考Person就能了解前半句。後半句關于使用構造方法可能就有點困難了。事實上也不難,看以下程式:
看到了不,eclipse的java文法校驗會報錯,報的是未定義Person()這樣一個構造方法,而在Person類中定義的是Person(String name, int age)這種一個構造方法。。
當然構造方法能夠定義多個的~
class Person { // 定義類
String name; // 定義屬性
int age; // 定義屬性
public Person(String name, int age) {// 定義兩個參數的構造方法
}
public Person(String name) {// 定義一個參數的構造方法
}
public Person() {// 定義無參構造方法
}
public void say() { // 定義方法
System.out.println("姓名:" + name + "。年齡:" + age);
}
}
這樣,構造方法也算是說完了。。
以下來說說封裝性。
6、封裝性
從定義上看:封裝性就是指類内部的定義對外部不可見。
作用是為了保護資料的安全性~
那什麼叫做對外部不可見?
看代碼:
private String name; // 定義屬性
private int age; // 定義屬性
在使用的過程中就會有錯誤,提示的是沒有權限訪問(對外部不可見)
以上的一種形式就叫做封裝~
那麼,name和age屬性怎麼訪問了?
package me.javen.oop;//包名
class Person { // 定義類
private String name; // 定義屬性
private int age; // 定義屬性
/*
* 對封裝的屬性使用setter和getter方法
*/
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Person(String name, int age) {// 定義兩個參數的構造方法
}
public Person(String name) {// 定義一個參數的構造方法
}
public Person() {// 定義無參構造方法
}
public void say() { // 定義方法
System.out.println("姓名:" + name + ",年齡:" + age);
}
}
public class People { // 定義類
public static void main(String[] args) {// 定義方法
Person person = null;
person = new Person();// 添加了無參構造方法
// 通過setter方法設定值
person.setName("Mr.稻帥");
person.setAge(24);
person.say(); // 用法
//通過getter方法擷取封裝了的屬性的值
System.out.println("姓名:" + person.getName() + ",年齡:" + person.getAge());
}
}
注意:
1、屬性或方法不希望被外部所訪問的話。則能夠使用privatekeyword聲明;