訊杰網(wǎng)站建設南寧seo教程
一. 類與對象
1.1 定義類 :類是由數(shù)據(jù)成員和成員方法組成的一個程序單元。數(shù)據(jù)成員表示類的屬性,成員方法表示類的行為。
定義類的語法格式 :
class 類名{數(shù)據(jù)類型 數(shù)據(jù)成員名;...public 返回值類型 方法名(參數(shù) 2, 參數(shù) 2 ...){// 方法體[return 表達式;]}
}
Java 用 class 關鍵字標識類,類體中定義數(shù)據(jù)成員和成員方法。
class Person{// 定義數(shù)據(jù)成員,表示人的特征String IDNumber;String name;int age;public String getIDNumber() {return IDNumber;}public void setIDNumber(String IDNumber) {this.IDNumber = IDNumber;}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;}void eating(String food){System.out.println(name + "吃" + food);}void study(String book){System.out.println(name + "正在學習: " + book);}void watchTV(String program){System.out.println(name + "正在看: " + program);}void display(){System.out.println("姓名: " + name);}}
定義類分3個層次,第1層是類名,第2層是數(shù)據(jù)成員,第3層是成員方法。
1.2.?創(chuàng)建使用對象
語法格式 : 先聲明后實例化對象
類名 對象名表;? ? ? ? ? ? ?//? 聲明對象
對象名 = new 類名();? ? //? 實例化對象
語法格式 : 聲明和實例化對象同時完成
類名? 對象名? =? new 類名();
實例化對象后,該對象擁有自己的數(shù)據(jù)成員和成員方法,通過引用對象成員使用對象。
語法格式 : 引用數(shù)據(jù)成員
對象名.數(shù)據(jù)成員名
語法格式 : 引用成員方法
對象名.成員方法名(參數(shù)表)
Java數(shù)據(jù)類型分為基本數(shù)據(jù)類型和引用數(shù)據(jù)類型。類屬于引用數(shù)據(jù)類型,引用數(shù)據(jù)類型指一段堆內(nèi)存空間能同時被多個棧內(nèi)存空間指向,對象名指的是保存在棧內(nèi)存中用來訪問其對應堆空間的訪問地址。堆內(nèi)存保存數(shù)據(jù)成員信息,因此能通過對象名引用堆內(nèi)存。
1.3 構造方法
1.3.1 定義構造方法
class 類名{訪問權限 類名(形參列表){// 方法體;// 構造方法沒有返回值}
}
構造方法是類中特殊的成員方法,特殊性主要體現(xiàn)在
a) 構造方法名與類名相同
b) 不能為構造方法指定類型,也不能用return 語句返回值。但構造方法由隱含返回值,該值由系統(tǒng)內(nèi)部使用
c) 可以重載構造方法
d) 編程人員不能顯示的直接調(diào)用構造方法,每當new 關鍵字創(chuàng)建對象時,JVM為新建對象在堆內(nèi)存開辟空間后,JVM將自動調(diào)用構造方法初始化新對象。
e) 如果自定義類中未定義構造方法,系統(tǒng)將提供要給默認的空構造方法。如果自定義類中定義了構造方法,系統(tǒng)將不再提供空構造方法
1.9 抽象類
1.9.1 抽象類概念 : 抽象類刻畫公共行為特征,但并沒有在抽象類內(nèi)部實現(xiàn)這些公共行為,而是通過繼承由派生類實現(xiàn)具體的公共行為。抽象類中定義的方法稱為抽象方法,這些方法只有方法聲明而沒有方法具體定義,派生類覆寫抽象方法,實現(xiàn)與該派生類相關的操作。
1.9.2 定義抽象類
用abstract 修飾的類稱為抽象類,用 abstract 修飾的方法,且只有方法聲明,沒有方法體的方法稱為抽象方法。
定義抽象類語法格式
abstract class 抽象類名{
? ? ? ? //數(shù)據(jù)成員
? ? ? ? //構造方法
?? ? ? ? [訪問權限] 返回值類型 方法名(形參列表){
? ? ? ? ? ? ? ? // 方法體
? ? ? ? ? ? ? ? 返回值
????????}
? ? ? ? [訪問權限] abstract 返回值類型 方法名(形參列表);
}
Java 程序對抽象類有如下要求 :
(1) 抽象類中可以有0個或者多個抽象方法,也可以包含非抽象方法。
(2) 抽象類中可以不定義抽象方法,但有抽象方法的類必須是抽象類。
(3) 抽象類可以派生子類。如果派生實體類,實體子類必須實現(xiàn)抽象類中定義的所有抽象方法;如果派生抽象子類,抽象子類可以不實現(xiàn)抽象父類的抽象方法。
// 抽象父類
abstract class Person{public void talk(){ }; // 普通方法abstract void workOn(); //抽象方法
}// 實體子類
class Teacher extends Person{void workOn(){System.out.println("教師授課");}
}// 抽象子類
abstract class Student extends Person{// 沒有實現(xiàn)父類的抽象方法 workOn()abstract void study();
}
(4) 抽象類不能實例化對象,由抽象類派生的實體子類實例化抽象父類對象。
package abstract_test;abstract class Person{// 1.1 私有數(shù)據(jù)成員private String name;// 1.2 構造方法public Person(){ }public void setName(String name) {this.name = name;}public String getName() {return name;}public Person(String name){this.name = name;}public void eating(String food){System.out.println(this.name + "正在吃" + food);}abstract public void workOn();
}// 2. Person類的子類 Teacher
class Teacher extends Person{private String department;public Teacher() { }public Teacher(String name, String department){super(name); // 調(diào)用父類構造方法this.department = department;}public String getDepartment() {return department;}public void setDepartment(String department) {this.department = department;}public void workOn(){System.out.println(this.getName() + " is " + this.department + " workint");System.out.println(this.getName() + " teaching chinese");}
}// 3. Person 的子類 Studentclass Student extends Person{private int id;public Student() {}public Student(String name, int id){super(name);this.id = id;}public int getId() {return id;}public void workOn(){System.out.println("id:" + getId() + ", name:" + getName() + " studing");}
}public class abstract_demo {public static void main(String[] args) {Teacher th = new Teacher("kongzi", "Chinese");th.workOn();Student st = new Student("zilu", 10001);st.workOn();}
}
抽象類本身不能通過構造方法創(chuàng)建對象,但能通過實體子類調(diào)用抽象父類的構造方法。繼承機制中,不管父類是普通類還是抽象類,實例化子類對象前必須先實例化父類對象。