Java修飾符
阿新 • • 發佈:2020-09-19
一、抽象概述
-
不具體的,似是而非的
-
沒有具體實現的
-
比如Animal,只是對動物的大概描述
-
能吃
-
能睡
-
-
具體吃啥,怎麼睡我們無從得知,創建出來的物件意義不大
-
我們認為這種類不應該直接建立物件,應該讓其子類建立具體的物件
-
怎麼限制?做成抽象類
-
abstract修飾的類可以變成抽象類
-
二、抽象類(重點)
2.1 定義
-
被abstract修飾的類成為抽象類
-
無法直接建立物件
-
抽象類中可以存在抽象方法
package com.qf.abs;
public class Demo01 {
public static void main(String[] args) {
// 抽象類無法直接建立物件
// Animal animal = new Animal();
}
}
abstract class Animal{
public abstract void eat();
}
2.2 抽象類的子類和物件
-
抽象類無法直接建立物件,但是可以有子類
-
抽象類的子類繼承抽象類之後可以獲取到抽象類中的非私有普通屬性和方法
-
抽象類的子類如果想使用抽象類中的抽象方法,必須重寫這些方法之後才能使用
-
如果不使用抽象方法,做成抽象類也是可以的
package com.qf.abs;
public class Demo01 {
public static void main(String[] args) {
// 抽象類無法直接建立物件
// Animal animal = new Animal();
Husky husky = new Husky();
System.out.println(husky.type);
husky.breath();
husky.eat();
}
}
/**
* 抽象類Animal
* 描述動物的一個類
* 只做了大概的描述,沒有具體的實現
* 需要子類繼承此類後做具體的描述
* @author Dushine2008
*
*/
abstract class Animal{
// 屬性
String type = "動物";
String section;
public abstract void eat();
public abstract void sleep();
public void breath() {
System.out.println("所有的動物都依賴氧氣存活...");
}
}
abstract class Dog extends Animal{
}
class Husky extends Dog{
三、抽象類和多型案例(掌握)
-
建立抽象類Car
-
建立Car的子類
-
Auto
-
Bus
-
Tractor
-
-
在子類重寫繼承的抽象方法和自己獨有的方法
-
使用多型的思想建立物件並呼叫這些方法
package com.qf.abs;
public class Demo02 {
public static void main(String[] args) {
Car car01 = new Auto();
car01.start();
car01.stop();
// 向下轉型
Auto auto = (Auto) car01;
auto.manned();
System.out.println("========================");
Car car02 = new Bus();
car02.start();
car02.stop();
// 拆箱
Bus bus = (Bus) car02;
bus.manned();
System.out.println("========================");
Car car03 = new Tractor();
car03.start();
car03.stop();
Tractor tractor = (Tractor) car03;
tractor.doFarmWork();
}
}
/**
* 車的頂層類
* 抽象類
* 方法沒有具體的實現
* @author Dushine2008
*
*/
abstract class Car{
// 屬性
int weight;
int height;
String brand;
int price;
// 方法
public abstract void start();
public abstract void stop();
}
/**
* 奧拓車
* 繼承Car
* 重寫啟動和停止的方法
* @author Dushine2008
*
*/
class Auto extends Car{