DAY10 復習
1.標準類的制作
1. 成員變數-屬性
使用private進行封裝,封裝后提供對應的getXxx()與setXxx()
2. 構造方法
- 提供一個本類的無參構造
- 提供一個全參構造:創建物件+給物件的所有屬性賦值
3. 成員方法-普通方法
- 根據本類的業務提供一些方法
- 提供一個方法,用于展現本類的類名以及本類所有屬性和屬性值
4. 創建物件進行測驗
- 使用無參構造創建物件,然后呼叫setXxx()給物件的所有屬性賦值
- 使用全參構造創建物件,物件的屬性同時也有值
5. 練習鞏固
需求:創建學生類,按照上述步驟進行測驗
學生的屬性:學號 姓名 性別 住址 科目
學生的功能:學習 吃飯 睡覺
- 創建學生類Student
package cn.tedu.oop;
/*本類用于描述學生這一類事物*/
public class Student {
//1.1定義學生的屬性
//1.2 封裝學生的屬性
private int id;//學號
private String name;//姓名
private char gender;//性別
private String address;//住址
private String subject;//科目
//2.1提供本類的無參構造
public Student(){
System.out.println("我是Student的無參構造");
}
//2.2提供本類的全參構造
//右鍵->Generate->Contructor->Shift全選所有屬性->OK
public Student(int id, String name, char gender, String address, String subject) {
this.id = id;
this.name = name;
this.gender = gender;
this.address = address;
this.subject = subject;
System.out.println("我是Student的全參構造");
}
//3.1提供本類的普通方法1
public void study(){
System.out.println("學習使我快樂~");
}
//3.2提供本類的普通方法2
public void eat(int n){
System.out.println("今天我要干它"+n+"碗大米飯");
}
//3.3提供本類的普通方法3
public String sleep(){
return "今天又睡了美美的一覺";
}
//4.提供本類的一個展示型別與所有屬性和屬性值的方法
public void show(){
System.out.println("Student:[id="+id+",name="+name+",gender="+gender+",address="+address+",subject="+subject+"]");
}
//1.3提供屬性對應的get與set方法
//右鍵->Generate->Getter and setter->Shift全選所有屬性->OK
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public char getGender() {
return gender;
}
public void setGender(char gender) {
this.gender = gender;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
}
- 創建學生類的測驗類TestStudent
package cn.tedu.oop;
/*本類用作學生類的測驗類*/
public class TestStudnet {
public static void main(String[] args) {
//1.1使用無參構造創建物件
Student s = new Student();
//1.2通過setXxx()給物件的所有屬性賦值
s.setId(1);
s.setName("林沖");
s.setGender('男');
s.setSubject("CGB");
s.setAddress("廟里");
//1.3通過物件呼叫方法測驗
s.study();
s.eat(3);
System.out.println(s.sleep());
s.show();//Student:[id=1,name=林沖,gender=男,address=廟里,subject=CGB]
//2.1使用全參構造創建物件
Student s2 = new Student(2,"李逵",'男',"豬肉鋪","ACT");
s2.study();
s2.eat(10);
System.out.println(s2.sleep());
s2.show();
}
}
2. 介面
- 我們通過interface關鍵字定義介面
- 介面實作類需要通過關鍵字implements與介面建立實作關系
- 介面不可以創建物件/實體化
- 在Java8中,介面中所有的方法都是抽象方法,方法可以簡寫,會自動拼接public abstract
- 介面中沒有構造方法,介面實作類呼叫的構造方法是父類的,不是父介面的
注意:如果一個類沒有明確指定父類的話,會默認繼承頂級父類Object - 介面中沒有成員變數,都是靜態常量,默認會拼接public static final
- 介面不是類!!!你可以把介面理解成一個特殊的抽象類,特殊在,所有的方法都是抽象方法
- 如果一個實作類實作了介面,要不變成一個抽象子類【不實作/實作部分】,要不變成一個普通子類【全部實作】
- 介面是用來制定規則的【有哪些方法,方法有引數嗎?有回傳值型別嗎?】,并不做具體的實作
- 介面可以多繼承【一個介面可以繼承多個介面】 多實作 【一個類可以實作多個介面】
3. 類與類的關系
繼承關系,只支持單繼承
比如: class A extends B ,A是子類,B是父類,子類具備父類的所有功能
- 子類不能使用父類的私有資源,原因是私有不可見
- 繼承相當于子類把父類的功能復制了一份,但是構造方法不可繼承
- 子類如果想要在不改變父類功能的前提下,實作功能的修改與拓展,可以重寫
重寫遵循的原則:兩同 兩小 一大
注意:方法名+引數串列 稱為: 方法簽名
4. 介面與介面的關系
繼承關系,既可以單繼承,也可以多繼承
比如:interface A extends Inter1{}
比如:interface B extends Inter,inter2{}
A是Inter1的子介面
B是Inter1與inter2共同的子介面
注意:如果是B的普通實作類
就需要實作B介面以及B介面從Inter1與Inter2介面中繼承下來的所有抽象方法
5.類與介面的關系
實作關系,即可以單實作,也可以多實作
比如: class A implements Inter1{ }
比如: class B implements Inter1,Inter2{ }
A是Inter1介面的子實作類
B是Inter1與Inter2介面共同的實作類
注意:B就需要實作Inter1與Inter2介面的所有抽象方法,否則就是一個抽象子類
注意:如果有任何一個抽象方法沒有實作,那么這個類一定是一個抽象子類
我們一般創建的都是介面實作類的物件,不用創建多型物件那么麻煩
6. 抽象類與介面的比較
- 抽象類是一個特殊的類,這個類被abstract修飾,并且可以存在抽象方法
介面可以看作是一個特殊的抽象類,介面里面所有的方法都是抽象方法
但是注意:介面不是類,介面使用interface關鍵字來定義 - 抽象類中有構造方法,但介面中沒有構造方法
注意:抽象類的子類呼叫的就是抽象類的構造,但介面的實作類呼叫的是自己父類的構造方法 - 抽象類與介面均不可以創建物件
- 介面可以多繼承,抽象類只能單繼承
- 抽象類中可以定義普通的成員變數,但介面中都是靜態常量
- 抽象是后天重構的結果,介面是先天設計的結果
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/300078.html
標籤:其他
