1. 程式人生 > >多型、抽象類、介面

多型、抽象類、介面

多型、抽象類、介面

多型

在這裡插入圖片描述

多型程式碼演示

父類
public class Fu {
    int i=199;
    public Fu() {
        System.out.println("我是父類構造方法");
    }
    public void show(){
        System.out.println("我是父類show方法");
    }
}

子類

public class Zi extends Fu{
    int i=100;
    public Zi() {
        //super();預設就有的父類引用,因此會先初始化父類建構函式
        System.out.println("我是子類建構函式");
    }
    @Override
    public void show() {
        System.out.println("我是子類重寫的show方法");
    }
    public void show1(){
        System.out.println("我是子類特有的show1方法");
    }
}

測試類

public class Text {
    public static void main(String[] args) {
        Fu f=new Zi();
        System.out.println(f.i);//因為在多型時先指向的是父類,因此結果是199,請看下面示意圖
        f.show();
        //如果不加這一句直接寫f.show1(); 這段程式碼會報錯,因此要想呼叫子類特有成員,就要強制轉化成子類
        Zi z=(Zi)f;
        z.show1();
    }
}

結果

我是父類構造方法
我是子類建構函式
199
我是子類重寫的show方法
我是子類特有的show1方法

以上示意圖

在這裡插入圖片描述

抽象類

  抽象類好比就是動物這個概念,動物裡有各種各樣的生物,比如說貓和狗,它們都有共同的動作(如:吃飯、睡覺),但是這些動作表達的方式卻又不同,因此我們運用到了抽象這個概念,把共同的動作寫在抽象類中,通過不同個體(類)對它進行表達(重寫)。

在這裡插入圖片描述

抽象類程式碼演示

抽象類
public abstract class Abstract {
    int i=100;//變數
    final double f=19.3;//常量
    public abstract void show();//抽象方法
    public abstract void show1();//抽象方法
    //具體方法
    public void show3(){
        System.out.println("我是抽象類的具體方法");
    }
}

子類

public class AbstractZi extends Abstract{
//方法重寫
    @Override
    public void show() {
        System.out.println("我是子類的重寫的show方法");
    }
    @Override
    public void show1() {
        System.out.println("我是子類重寫的show1方法");
    }
}

測試類

public class AbstractText {
    public static void main(String[] args) {
        AbstractZi z = new AbstractZi();//new物件
        z.show();
        z.show1();
        z.show3();
        System.out.println(z.i+"\t"+z.f);
    }
}

結果

我是子類的重寫的show方法
我是子類重寫的show1方法
我是抽象類的具體方法
100	19.3

介面

  介面就是我們用來擴充套件某項功能的,比如馬戲團的貓和普通貓不同,馬戲團裡的貓會跳火圈、計算等,這只是貓中的一部分會,這個額外的動作就需要我們用介面來定義。

在這裡插入圖片描述

介面程式碼演示

介面
interface Base {
    public static final int k = 0;//只能是公共靜態常量
    public abstract void show();//方法宣告(public abstract可以不寫,系統會自動隱式加上)
    public abstract void show1();
}

實現類

class Demo implements Base {
	@Override
	public void show() {
		System.out.println("我重寫了show方法");
	}
	@Override
	public void show1() {
		System.out.println("我重寫了show1方法");
	}
}

測試類

public class Text {
    public static void main(String[] args) {
        Demo d = new Demo();
        d.show();
        d.show1();
        System.out.println(d.k);
    }
}

結果

我重寫了show方法
我重寫了show1方法
0