Java中的兩種抽象定義:一爲抽象類(Abstract Class),二爲接口(Interface)。java
抽象類是關鍵字abstract修飾的類,既爲抽象類,抽象抽象即不能被實例化。而不能被實例化就無用處,因此抽象類只能做爲基類(父類),即被繼承的類。抽象類中能夠包含抽象方法也能夠不包含,但具備抽象方法的類必定是抽象類。編程
抽象類的使用原則以下:編程語言
好比: ide
1 package com.fzz.test; 2 3 //抽象類A 4 abstract class A{ 5 public void fun(){//普通方法 6 System.out.println("存在方法體的方法"); 7 } 8 9 public abstract void print();//抽象方法,沒有方法體,有abstract關鍵字作修飾 10 11 } 12 //單繼承特性 13 class B extends A{//B類是抽象類的子類,是一個普通類 14 @Override 15 public void print() {//強制要求重寫 16 System.out.println("Why is more important than what!"); 17 } 18 19 } 20 //測試類 21 public class TestDemo { 22 public static void main(String[] args) { 23 A a = new B();//多態:向上轉型 24 a.fun();//被子類所覆寫的過的方法 25 } 26 }
詳細可參考:https://blog.csdn.net/wei_zhi/article/details/52736350測試
在JAVA編程語言中是一個抽象類型,是抽象方法的集合,接口一般以interface來聲明。一個類經過繼承接口的方式,從而來繼承接口的抽象方法。spa
當類實現接口的時候,類要實現接口中全部的方法。不然,類必須聲明爲抽象的類。類使用implements關鍵字實現接口。在類聲明中,Implements關鍵字放在class聲明後面。.net
Java中類不容許多繼承但接口能夠。code
1 // 文件名: Sports.java 2 public interface Sports 3 { 4 public void setHomeTeam(String name); 5 public void setVisitingTeam(String name); 6 } 7 8 // 文件名: Football.java 9 public interface Football extends Sports 10 { 11 public void homeTeamScored(int points); 12 public void visitingTeamScored(int points); 13 public void endOfQuarter(int quarter); 14 } 15 16 // 文件名: Hockey.java 17 public interface Hockey extends Sports 18 { 19 public void homeGoalScored(); 20 public void visitingGoalScored(); 21 public void endOfPeriod(int period); 22 public void overtimePeriod(int ot); 23 }
abstract class和interface是支持抽象類定義的兩種機制。正是因爲這兩種機制的存在,才賦予了Java強大的面向對象能力。abstract class和interface之間在對於抽象類定義的支持方面具備很大的類似性,甚至能夠相互替換,所以不少開發者在進行抽象類定義時對於abstract class和interface的選擇顯得比較隨意。具體看下錶:對象