一、面向對象的概念
關於面向對象的概念問題一直困擾了我好久,雖然看了很多例子但始終不理解(文轉理),最近在知乎上看到這麼一個回答,我要給他十萬個贊,感覺很是精闢
引號內爲原文,知乎網友匿名
“
你的程序要完成一個任務相當於將一個故事
面向過程是編年史
面向對象時紀傳體
相對於複雜的程序/宏大的故事,事實證明了,面向對象/紀傳體都是更好的表達方式
”
https://www.zhihu.com/question/27468564?sort=created(附該問題地址)
面向對象有三個特性
1、封裝性 (是面向對象核心思想,使程序更安全)
2、繼承性 (通過繼承,可以不用編寫新的類,對原有類進行擴展)
3、多態性 (多態性指的是在程序中允許出現重名現象,即一個類中定義的屬性和方法被其他類繼承後,可以表現出不同的數據類型或不同的行爲,這使得同一屬性和方法在不同的類中有不同的意義)
二、類與對象
類和對象的概念:
類就是類別,類別關注共同的屬性和行爲。
萬物皆對象,有些對象是包含着其他對象的,成爲類。
例如狗是一個類,狗的屬性:體重,毛色;狗的行爲:吃狗糧,汪汪叫。
而一隻多少體重,什麼顏色,這就是對象。
對象是根據類創建的,並且一個類可以創建多個對象。
1、類的定義
想要創建一個對象,首先要定義一個類,用來描述一組對象的共同特徵,行爲。
類中有成員變量,成員方法。
成員變量:描述對象的特徵,又稱作屬性
成員方法:描述對象的行爲,簡稱方法
方法中也可以定義變量,這種變量稱爲局部變量。如果兩種變量重名,此時通過變量名訪問的是局部變量。
class Person{
int age=10;
void speak(){
int age=20;
System.out.println("大家好,我今年"+age+"歲")
}
}
//代碼結果是20,最簡單的類和方法也是這樣定義的
有類之後如何創建對象?可以使用new關鍵字
//創建Person的實例對象
Person p=new Person();
//如何訪問對象的成員? 對象名.成員名
p.age=30; //爲age賦值
p.speak(); //調用對象的方法
當實例化一個對象的時候,java虛擬機會自動爲其初始化,不同類型的變量初始化值也不同。
2、類的封裝
定義:將類中的屬性私有化,即使用private關鍵字來修飾,私有屬性只能在他所在的類中被訪問。
外界如何訪問私有屬性?
獲取屬性值 getXxx( )方法
設置屬性值 setXxx( )方法
//案例:如果編寫一個自我介紹,把年齡輸入成負數,是不對的,但是我們又無法制止,因此用到了封裝,代碼如下
class Student {
private String name; // 將name屬性私有化
private int age; // 將age屬性私有化
// 下面是公有的 getXxx 和 setXxx 方法
public String getName() {
return name;
}
public void setName(String stuName) {
name = stuName;
}
public int getAge() {
return age;
}
public void setAge(int stuAge) {
// 下面是對傳入的參數進行檢查
if (stuAge <= 0) {
System.out.println("年齡不合法...");
} else {
age = stuAge; // 對屬性賦值
}
}
public void introduce() {
System.out.println("大家好,我叫" + name + ",我今年" + age + "歲!");
}
}
public class Example04 {
public static void main(String[] args) {
Student stu = new Student();
stu.setAge(-30);
stu.setName("李芳");
stu.introduce();
}
}
//這樣就會在傳入參數的過程中起到檢查作用