Java中的類與物件
我們都知道Java是一門面向物件的程式語言,而類是面向物件中最為核心的一部分,在百度百科中,類的解釋為” 類(Class)是面向物件程式設計(OOP,Object-Oriented Programming)實現資訊封裝的基礎。類是一種使用者定義的引用資料型別,也稱類型別。每個類包含資料說明和一組操作資料或傳遞訊息的函式。類的例項稱為物件。 “
而在Java中,更是有萬物皆物件的說法。以下是筆者在學習Java中類與物件的一些見解,如有錯誤,歡迎指正。
類與物件的關係
類是一種抽象的概念,可以看作是所有具有相同屬性和方法的集合;而物件則是類的例項化,是一種具體的概念。
比如Student(學生)就是一種抽象概念,但實際上並不存在具體的學生,而是我們所有在上學的人的一種集合;而具體到每一個人身上,如小明,小紅就是物件,他們是實際存在的個體,是學生的具體化,就稱為物件。
類的定義
在Java中,類中包含屬性和方法,屬性是用來儲存特性,描述該類例項化後的物件的一些共同特徵,而方法則是一些共同的行為特徵。
定義的格式如下:
class Student{
//屬性
String name;
int age;
//方法
void ReadingBook(){
System.out.println(name+" is reading book ");
}
}
物件的例項化
在Java中,物件例項化主要使用new關鍵字
Student Jom=new Student();
構造器
在上面的例子中,我們發現呼叫Jom
並不是我們想要輸出例項化物件正在讀書的結果,那麼,怎麼給型別的屬性賦值呢,這裡我們可以使用帶參構造器,在物件示例化時就給物件的相應屬性賦值。
在類的方法中新增如下程式碼
Student(String name,int age){
this.name=name;
this.age=age;
}
這時我們發現在物件例項化時如果不輸入引數,就會報錯,這是因為如果我們不寫構造器時,系統會自動幫我們生成一個預設的無參構造器,但當我們自己新增構造器時,系統就不會幫我們新增。總之,每一個類都會有一個構造器。當然,一個類也可以有多個構造器,如下、
Student(){}; Student(String name,int age){ this.name=name; this.age=age; }
這時我們發現,直接初始化物件,不傳入引數也可以通過編譯。
類的繼承
在學習繼承前,我們要連線類中的三種成員public、private、protected,這三種成員在繼承時有很大的區別,子類中只能繼承分類中的public和protected成員,在上面的例子中,如果我們想構造一個屬於大學生的類,就可以選擇繼承於Student,使用Student裡面的屬性和方法。如下
class CollegeStudent extends Student{
}
在Java中,繼承不像C++那樣有公有繼承、私有繼承和保護繼承,統一都是使用關鍵字extends,相當於C++中的公有繼承,在繼承中,有兩個很重要的指標,分別為this和super,this指向當前物件的方法和屬性,super指向父類的方法和屬性,如下例子
public class test {
public static void main(String[] args) {
CollegeStudent Jom=new CollegeStudent();
Jom.print();
}
}
class Student{
String name;
int age;
void Show(){
System.out.println("I'm a student\n");
}
}
class CollegeStudent extends Student{
void Show(){
System.out.println("I'm a college student\n");
}
void print(){
super.Show();
this.Show();
}
}
輸出結果為:
在Java中,重寫父類的變數和方法後,使用super就可以很好地區分父類和子類。