1. 程式人生 > >嘿,你物件在這兒—— 面向物件:類和物件

嘿,你物件在這兒—— 面向物件:類和物件

  相信很多小夥伴學Java的時候都是戰術開頭:HelloWorld! 首先,建立一個類,然後寫一個主方法,最後列印輸出,ojbk完事兒。等到我們學面向物件的時候不得不去了解一下什麼是類,什麼是物件,他倆是啥關係。關於面向物件,網上那個寫的很好的例子已經被我抄到C語言與Java的區別那篇了,感興趣的小夥伴可以點左上角的選單去檢視。

  那麼類和物件到底是什麼呢?類就是有某些共同特徵的實體的集合;物件就是類的例項,一個物件當然就是一個類的例項。來,上例子:有一句話叫物以類聚人以群分,咱們拿人來舉例,人類或者說人當然是一個類,因為你說人的時候它不是一個實體,也就是不知道說的是哪個人;但是說人的時候我們都知道特徵,有鼻子有眼的,能製造和使用工具。還記得初一英語的第一篇對話不,I'm Kangkang are you Michael?這裡的Kangkang和Michael是不是物件,當然是,Kangkang有鼻子有眼的吧。不能說人家不會製造和使用工具吧,簡單的也算,符合人這個類的特徵,又是一個例項,所以人家是一個物件,那Michael呢?當然也是一個物件。

  類和物件的關係該亮出來了,類是物件的抽象,物件是類的例項。啥意思呢,首先我不知道小夥伴對於抽象的理解是不是和我以前一樣,具體的反義詞啊,很難描述的東西啊,其實這裡的抽象簡單來說就是抽出像的部分,你看Kangkang有鼻子有眼的,會走路、吃飯、睡覺......那Michael也是,你也是,我也是;每一個人都有的特點抽取出來歸為人類。那物件是類的例項就應該很好理解了,Kangkang這個物件是不是人的一個例項?當然是,你家的貓是不是貓的一個例項?毛茸茸的,還會喵喵叫,當然是,那別人家養的貓自然也是貓類的一個例項。

  這裡再說一下物件的屬性和方法,然後咱們就上一段程式碼,物件包含屬性和方法,屬性就是物件的一些特徵,比如:名字,性別,身高;方法可以理解為物件的某些行為,比如給吃飯,睡覺,學習。來上一段程式碼:

 1 package test;
 2 
 3 public class Person {
 4 
 5     int age;// age屬性
 6     String name;// name屬性
 7 
 8     // 定義一個睡覺方法
 9     public void sleep() {
10         System.out.println("睡覺");
11     }
12 
13     // 定義一個學習方法
14     public void study() {
15         // 方法中可以加上屬性
16         System.out.println(name + "學習");
17     }
18 
19     public static void main(String[] args) {
20 
21         // 建立一個Person類的物件p1
22         Person p1 = new Person();
23 
24         // 通過 物件.屬性 來給屬性賦值
25         p1.name = "Kangkang";
26         p1.age = 18;
27         System.out.println(p1.name);
28         
29         //通過物件.方法來呼叫方法
30         p1.sleep();
31     
32     }
33 
34 }
    
執行結果:
     Kangkang
     睡覺 

不知道有沒有初學者有為啥Kangkang在睡覺前面列印,結果中的Kangkang是直接在main方法中列印p1物件的name屬性得到的,而睡覺則是p1物件呼叫的前面的sleep方法,在執行呼叫的方法的時候列印的。

我們來給建立物件那一句拿出來看看

 這個類只能建立一個物件嗎?當然不是,只要你想要多少new多少

 1 package test;
 2 
 3 public class Person {
 4 
 5     int age;// age屬性
 6     String name;// name屬性
 7 
 8     // 定義一個睡覺方法
 9     public void sleep() {
10         System.out.println("睡覺");
11     }
12 
13     // 定義一個學習方法
14     public void study() {
15         // 方法中可以加上屬性
16         System.out.println(name + "學習");
17     }
18 
19     public static void main(String[] args) {
20 
21         // 建立一個Person類的物件p1
22         Person p1 = new Person();
23 
24         // 通過 物件.屬性 來給屬性賦值
25         p1.name = "Kangkang";
26         p1.age = 18;
27         System.out.println(p1.name);
28         
29         //通過物件.方法來呼叫方法
30         p1.sleep();
31         
32         //再建立一個物件p2
33         Person p2 = new Person();
34         //給屬性賦值
35         p2.name ="特朗普";
36         p2.age = 3;
37         
      //p2呼叫study方法 38 p2.study();
      //p1呼叫study方法 39 p1.study(); 40 41 } 42 43 }
  執行結果:
      Kangkang
      睡覺
      特朗普學習
      Kangkang學習

study()方法的列印語句中我們加了一個屬性name p2呼叫時列印的是p2的name屬性 特朗普+學習,p1呼叫時列印的是p1的name屬性 Kangkang+學習

所以我們通過物件呼叫方法時,方法中的屬性就是當前物件的屬性。