標籤:
抽象類別就是包含abstract方法的類,抽象類別可以包含非抽象方法,但抽象方法一定要定義在抽象類別中,抽象類別不可以執行個體化,抽象類別裡的抽象方法必須在具體的子類中實現。
具體抽象類別代碼進行分析:
public abstract class Animal {// 抽象類別裡定義的抽象方法必須在具體子類中實現,所以抽象類別裡不能有抽象構造方法或者抽象靜態方法// public abstract Animal(){// // }// public abstract static void sleep(); public Animal(){ } public String eye; //普通成員變數 public abstract void eat(); //abstract方法 public void drink() { //非抽象方法 System.out.println("All Animal drink water!"); }}abstract class CrawlAnimal extends Animal{ //如果父類中有子類未實現的方法,該類應定義為抽象類別 public abstract void jump(); }abstract class FlyAnimal extends Animal{ public abstract void fly();}class Dog extends CrawlAnimal{ //抽象類別是繼承 @Override public void jump() { System.out.println("Dog is jumping!"); } @Override public void eat() { System.out.println("Dog eat bone"); } @Override public void drink(){ System.out.println("Dog drink milk"); } }}
介面就是抽象類別的一個特例,介面中的所有方法都是抽象的。介面的成員變數預設為public static final類型,方法預設為public abstract類型。
具體介面代碼如下:
public interface AnimalInterface { //介面不允許有構造方法// public AnimalInterface(){// // } public static final String eye ="black";//沒有普通成員變數,不可修改的靜態成員變數,需要初始設定變數 public abstract void eat(); void sleep(); //預設public abstract// public static void jump(); 介面中不可以有靜態方法 }class CrawlAnimal2 implements AnimalInterface{ //介面是實現 @Override public void eat() { // TODO Auto-generated method stub } @Override public void sleep() { // TODO Auto-generated method stub } }
抽象類別和介面的區別在於,
從構造方法,成員變數,方法,訪問類型,靜態方法和變數,繼承性 文法方面的不同:
1.抽象類別可以有構造方法,介面中不能有構造方法。
2.抽象類別中可以有普通成員變數,介面中沒有普通成員變數
3.抽象類別中可以包含非抽象的普通方法,介面中的所有方法必須都是抽象的,不能有非抽象的普通方法。
4. 抽象類別中的抽象方法的訪問類型可以是public,protected,但介面中的抽象方法只能是public類型的,並且預設即為public abstract類型。
5. 抽象類別中可以包含靜態方法,介面中不能包含靜態方法
6. 抽象類別和介面中都可以包含靜態成員變數,抽象類別中的靜態成員變數的訪問類型可以任意,但介面中定義的變數只能是public static final類型,並且預設即為public static final類型。
7. 一個類可以實現多個介面,但只能繼承一個抽象類別。
兩者在應用上的區別: 介面更多的是在系統架構設計方法發揮作用,主要用於定義模組之間的通訊契約。而抽象類別在代碼實現方面發揮作用,可以實現代碼的重用。
本文為學習筆記,如有不當,請大家指出共同學習改正,謝謝。
Java基礎之抽象類別和介面