Java語言基礎(多態,抽象類,接口)

多態

1.什麼是多態?

某一個事物,在不同時刻表現出來的不同狀態。

父 f =  new();

2.多態的前提?

  • 要有繼承關係。
  • 要有方法重寫。 其實沒有也是可以的,但是如果沒有這個就沒有意義。
  • 要有父類引用指向子類對象。

3.多態中的成員訪問特點?

  • 成員變量
    編譯看左邊,運行看左邊。
  • 構造方法
    創建子類對象的時候,會訪問父類的構造方法,對父類的數據進行初始化。
  • 成員方法
    編譯看左邊,運行看右邊。
  • 靜態方法
    編譯看左邊,運行看左邊。

4.多態的好處?

提高了代碼的維護性(繼承保證)
提高了代碼的擴展性(由多態保證)

5.多態的弊端?

不能使用子類特有的功能

注意:如果需要使用子類
可以把父類的引用強制轉換爲子類的引用。(向下轉型)

舉例:

public class MyTest {
    public static void main(String[] args) {
        Animal an = new Dog();
        an.eat();
        Dog dog=(dog) Animal;
        dog.lookdoor();
        an=new Cat();
        an.eat();
    }
}
class Animal{
    public void eat(){System.out.println("吃飯");}
}
class Cat extends Animal{
    @Override
    public void eat() {System.out.println("吃小魚乾");}
}
class Dog extends Animal{
    @Override
    public void eat() {System.out.println("狗吃骨頭");}
    public void lookdoor(){System.out.println("狗看門");}
}

抽象類

1.什麼是抽象類?

在Java中,一個沒有方法體的方法應該定義爲抽象方法,而類中如果有抽象方法,該類必須定義爲抽象類。

2.抽象類的特點?

  • 抽象類和抽象方法必須用abstract關鍵字修飾
抽象類格式:  abstract class 類名 {}
抽象方法格式: public abstract void eat();
  • 抽象類不一定有抽象方法,有抽象方法的類一定是抽象類
  • 抽象類中可以有構造方法,抽象類不能進行實例化
  • 抽象類的子類,要麼是抽象類,要麼重寫抽象類中的所有抽象方法。

3.抽象類的成員特點?

  • 成員變量:既可以是變量,也可以是常量。
  • 構造方法:有。
    用於子類訪問父類數據的初始化。
  • 成員方法:既可以是抽象的,也可以是非抽象的。

接口

1.什麼是接口?

爲了體現事物功能的擴展性,Java中就提供了接口來定義這些額外功能,並不給出具體實現。

2.接口的特點?

  • 接口用關鍵字interface表示
interface 接口名 {}
  • 類實現接口用implements表示
class 類名 implements 接口名 {}

3.接口成員特點?

  • 成員變量;只能是常量,並且是靜態的。
    默認修飾符:public static final
  • 構造方法:接口沒有構造方法。
  • 成員方法:只能是抽象方法。
    默認修飾符:public abstract

4.類與類,類與接口,接口與接口的關係?

a:類與類:
繼承關係,只能單繼承,可以多層繼承。
b:類與接口:
實現關係,可以單實現,也可以多實現。
並且還可以在繼承一個類的同時實現多個接口。
c:接口與接口:
繼承關係,可以單繼承,也可以多繼承。

5.抽象類和接口的區別?

  • 成員區別
    抽象類:
    成員變量:可以變量,也可以常量
    構造方法:有
    成員方法:可以抽象,也可以非抽象
    接口:
    成員變量:只可以常量
    成員方法:只可以抽象
  • 關係區別
    類與類
    繼承,單繼承
    類與接口
    實現,單實現,多實現
    接口與接口
    繼承,單繼承,多繼承
  • 設計理念區別
    抽象類 被繼承體現的是:”is a”的關係。 抽象類中定義的是該繼承體系的共性功能。
    接口 被實現體現的是:”like a”的關係。 接口中定義的是該繼承體系的擴展功能。
    舉例:
public class MyTest {
    public static void main(String[] args) {
    }
}
class Cat implements Fireinterface {
    public void eat() {
    }
    @Override
    public void fire() {
        System.out.println("貓學會了鑽火圈");
    }
}
class Dog implements Fireinterface{
    @Override
    public void fire() {
        System.out.println("狗學會了鑽火圈");
    }
}
public interface Fireinterface {  
       public abstract void fire();
}
``

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章