文章目錄
- 一.抽象類概述
- 二. 抽象類的特點
- 三. 抽象類的成員的特點
- 參考:
一.抽象類概述
當編寫一個類時,我們往往會為該類定義一些方法,這些方法是用來描述該類的功能具回想前面我們的貓狗案例,提取出了一個動物類,這個時候我們是可以通過Animal a = new Animal();來建立動物對象的,其實這是不對的。為什麼呢?因為,我說動物,你知道我說的是什麼動物嗎?隻有看到了具體的動物,你才知道,這是什麼動物。
是以說,動物本身并不是一個具體的事物,而是一個抽象的事物。隻有真正的貓,狗才是具體的動物。
同理,我們也可以推想,不同的動物吃的東西應該是不一樣的,是以,我們不應該在動物類中給出具體展現,而是應該給出一個聲明即可。
在Java中,一個沒有方法體的方法應該定義為抽象方法,而類中如果有抽象方法,該類必須定義為抽象類。
代碼:
abstract1
package Java_study;
/**
*
* @author 隻是甲
* @date 2021-06-28
* @remark 動物抽象類 抽象類概述
*
*/
public abstract class abstract1 {
/* public void eat() {
System.out.println("吃東西");
}*/
//抽象方法
public abstract void eat();
}
abstract2
package Java_study;
/**
*
* @author 隻是甲
* @date 2021-06-28
* @remark 動物抽象測試類 抽象類概述
*
*/
public class abstract2 {
public static void main(String[] args) {
//抽象類和抽象方法不能被執行個體化
//abstract1 a = new abstract1();
}
}
二. 抽象類的特點
抽象類和抽象方法必須用abstract關鍵字修飾
格式:
public abstract class 類名 {}
public abstract void eat();
抽象類不一定有抽象方法,有抽象方法的類一定是抽象類
抽象類不能執行個體化
那麼,抽象類如何執行個體化呢?
按照多态的方式,由具體的子類執行個體化。其實這也是多态的一種,抽象類多态。
抽象類的子類
要麼是抽象類
要麼重寫抽象類中的所有抽象方法
代碼:
abstract_animal
package Java_study;
/**
*
* @author 隻是甲
* @date 2021-06-28
* @remark 動物抽象類 抽象類特點
*
*/
public abstract class abstract_animal {
//抽象方法
public abstract void eat();
public void sleep() {
System.out.println("睡覺");
}
}
abstract_cat
package Java_study;
/**
*
* @author 隻是甲
* @date 2021-06-28
* @remark 動物抽象類子類--貓類 抽象類特點
*
*/
public class abstract_cat extends abstract_animal {
@Override
public void eat() {
System.out.println("貓吃魚");
}
}
abstract_dog
package Java_study;
/**
*
* @author 隻是甲
* @date 2021-06-28
* @remark 動物抽象類子類--狗類 抽象類特點
*
*/
public class abstract_dog extends abstract_animal {
@Override
public void eat() {
System.out.println("狗吃骨頭");
}
}
abstract_test1
package Java_study;
/**
*
* @author 隻是甲
* @date 2021-06-28
* @remark 動物抽象類子類--測試類 抽象類特點
*
*/
public class abstract_test1 {
public static void main(String[] args) {
// 建立對象(C: 抽象類不能執行個體化)
// abstract_animal animal = new abstract_animal();
// c1: 參照多态的方式,通過子類對象執行個體化
abstract_animal cat = new abstract_cat();
cat.eat();//貓吃魚
cat.sleep();//睡覺
}
}
三. 抽象類的成員的特點
成員變量
可以是變量
也可以是常量
構造方法
有構造方法,但是不能執行個體化
那麼,構造方法的作用是什麼呢?
用于子類通路父類資料的初始化
成員方法
可以有抽象方法 限定子類必須完成某些動作
也可以有非抽象方法 提高代碼複用性
代碼:
abstract_person
package Java_study;
/**
*
* @author 隻是甲
* @date 2021-06-28
* @remark 人抽象類 抽象類的成員的特點
*
*/
public abstract class abstract_person {
private int age = 20;
private final String country = "中國";
public abstract_person() {
}
public abstract_person(int age) {
this.age = age;
}
public void show() {
age = 30;
System.out.println(age);
//country = "美國"
System.out.println(country);
}
public abstract void eat();
}
abstract_student
package Java_study;
/**
*
* @author 隻是甲
* @date 2021-06-28
* @remark 人抽像的子類-學生類 抽象類的成員的特點
*
*/
public class abstract_student extends abstract_person {
@Override
public void eat() {
System.out.println("學生吃土");
}
}
abstract_test2
package Java_study;
/**
*
* @author 隻是甲
* @date 2021-06-28
* @remark 人抽像的測試類 抽象類的成員的特點
*
*/
public class abstract_test2 {
public static void main(String[] args) {
abstract_person student = new abstract_student();
student.show();//30
//中國
student.eat();//學生吃土
}
}
測試記錄:
30
中國
學生吃土
參考:
- https://blog.csdn.net/qq_43529621/article/details/115303081