您好,登錄后才能下訂單哦!
說到類和對象,這都是兩個比較抽象的詞,如果用在程序中,那就更不知道是什么意思了。其實大家可以先不聯系程序,我們在對一大堆東西分類的時候自然是有一個標準的,符合某些特征的分到一類,符合另外一些特征的分到另外一類。在每個類別中,每一樣東西都有相同的特征,但是又有所差別,每一樣東西就好比一個一個的對象,是一個切切實實的東西,而分類的類別就好似是一個標準或者描述,會更抽象一些。
在編程中,我們通常會借助程序去實現很多應用系統,來滿足日常生活中的需要,如網絡購物、人力資源管理等等。如果使用面向對象來開發,首先需要做的就是明確這個應用系統當中有哪些角色,這些角色都能夠使用哪些功能,每種都有哪些自己的特征。
我們以一個教學管理系統為例,主要的功能就是進行排課,記錄學生和教師的基本信息,記錄和統計學生的學習成績等。那這其中主要就涉及學生、教師、管理員三種角色,當有一批學生入學時,我們要將學生的信息錄入系統,這就好像我們一直在填的各種表格,每個學生需要采集的信息都是固定的,不同的是信息的內容。
這就好比我們定義了一個學生類,我們想要收集的學生信息就是對這個類別的描述,學生有學號、有院系、有其他的基本信息,這也是學生的固有特征,于是我們可以用如下的代碼描述:
// 用于描述學生的類
public class Student{
String sno;// 學號
String name;// 姓名
String college;// 學院
String major;// 專業
...
}
理解了程序中類的概念和表示方式后,對象就比較好理解了。簡單來說對象就是按照類的標準創建出來的一個具體可以操作的東西,也就是一個個具體的學生。每個學生都具備相同的特征,但是可以有不同的姓名、學院、專業等自己的信息。在程序運行時的體現就是內存中開辟了對應的空間,想要創建一個新的對象使用如下的代碼:
public class Test{
public static void main(String[] args){
// 變量類型 變量名稱 = new 類的構造器();
Student student = new Student();
// 大寫的Student就是我們要使用的學生類型,名稱必須完全一致
// 小寫的student就是由學生類創建出來的對象的名稱
// 也是我們操作對象是直接使用的名稱
// new是用來創建對象的關鍵字,需要調用相應的構造器
// 有關于構造器的用法會在后續文章詳細說明,初學可以記憶為:類名();
}
}
從上面的例子中我們已經可以看到,類相當于是一個模板或是像工廠的圖紙,對象則相當于按照這個標準和模具創造出來的個體,每一個對象都具備相同的特征。
在程序中的體現就是,使用class關鍵字定義一個類結構,然后在這個結構中對整個類進行描述,都具備哪些屬性,都可以產生行為,但是只有具體的對象可以具備具體的屬性值和產生具體的行為(有關于靜態的聲明將在另外的文章中單獨說明)。
我們應該如何描述和定義一個類呢?我們最開始寫的HelloWorld不也是一個類嘛?為什么沒這么多亂七八糟的概念?下面我們就來進一步解析。
從客觀世界的角度出發,比如小明上了大學,這就是一個具體的學生,他有學號、姓名、對應的學院、專業等等,這都是他個人的基本信息,除此之外,他還可以進行多種活動,比如選課、考試、修改自己的部分信息等等。
那么我們從程序的角度出發,應該如何定義一個類呢?這取決于我們的需要,對于一個教學管理系統來說,我們關心的只是和學生學習相關的信息,學生能夠選課、考試等等。對于一個后勤管理系統來說,我們關心的則是學生的飯卡消費情況,出入宿舍的時間,學生能夠充值、消費、刷卡等等。所以如何定義和描述一個類,取決于我們的應用系統需要,或者是題目的要求。
屬性指的就是所描述的類當前的狀態,也就是他自己的一些信息,直接在類下進行定義,和正常聲明一個變量的格式相同,可以不指定初始值。
行為指的就是當前這個類所創建出的對象都能進行什么樣的行為,在程序上的表現就是方法,可以被具體的對象來進行調用,在方法體中用代碼實現具體的功能。
// 用于描述學生的類
public class Student{
// 學生類的屬性
String sno;// 學號
String name;// 姓名
String college;// 學院
String major;// 專業
...
// 學生類的行為
public void study(){
// 去學習
System.out.println("去上課");
}
public void exam(){
// 去考試
System.out.println("去考試");
}
}
在通常情況下,我們定義的一個類由四大部分構成:屬性、行為、構造器以及其他繼承Object的方法。也就是說都不存在可以直接執行的main方法,而只是為了定義一個我們想要使用的類,那么怎么樣才能調用到,把我們的類用起來呢?就是通過那些具備main方法的類,如最初我們使用的HelloWorld,這就是一個最簡形式的可執行類。
public class HelloWorld{
public static void main(String[] args){
System.out.println("Hello World!");
}
}
當然,我們也可以直接在類中添加main方法來測試運行,但是一般不會這樣做,因為會有一些權限的問題不能夠測試完整,通常的辦法是新建一個單獨的測試類,來進行調用測試。
// 調用時需要將兩個類放在同一目錄下(同一包中)
public class Test{
public static void main(String[] args){
// 創建一個學生對象
Student student = new Student();
// 為對象的屬性賦值
student.sno = "1130050152";
student.name = "小明";
student.college = "數學科學學院";
student.major = "信息與計算科學";
// 顯示對象的屬性值
System.out.println("該學生的名字是:" + student.name);
// 通過對象調用方法,發生行為
student.study();
student.exam();
}
}
通過上面我們已經知道對象的概念,以及如何使用創建和使用一個對象。接下來我們再來明確一下類和對象,對象和對象之間的關系。
創建對象的過程也可以被稱之為實例化,對象也可以被叫做類的實例。這個概念也很好理解,在類中只是定義了一系列的描述信息,真正去執行需要靠具體的對象,以一個類為基準,可以創建出很多對象。
對象與對象之間存在共同點,除了使用靜態聲明的屬性外,是不會互相影響的,這是一個很重要的特點。當我們使用不同的對象去調用方法和輸出屬性信息時,雖然類當中的結構完全一致,但是由于對象所處的狀態(屬性值)可能不同,那么方法執行的結果也會不同。
// 用于描述學生的類
public class Student{
// 學生類的屬性
String sno;// 學號
String name;// 姓名
double balance;// 余額
...
// 學生類的行為
public void recharge(double money){
// 對學生卡充值
balance += money;
System.out.println("當前余額為" + balance);
}
public void getBalance(){
// 顯示卡內余額
System.out.println("當前余額為" + balance);
}
}
// 測試類:將兩個類放在同一目錄下(同一包中)
public class Test{
public static void main(String[] args){
// 創建第一個學生對象
Student student1 = new Student();
// 為對象的屬性賦值
student1.balance = 23.70;
// 調用方法
student1.getBalance();
student1.recharge(100.0);
// 創建第二個學生對象
Student student2 = new Student();
// 為對象的屬性賦值
student2.balance = 15.60;
// 調用方法
student2.getBalance();
student2.recharge(50.0);
}
}
程序執行完畢后可以再次輸出查看兩個對象的屬性值,不會互相影響。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。