老生常談——抽象類和介面異同
阿新 • • 發佈:2018-12-24
今天是在這個公司的最後一天,外面下著雨,跟我心情一樣!雖然不是什麼大公司,但是跟同事的感情還是不錯的。革命尚未成功,同志仍需努力!未來的路還很長,所以時刻準備著迎接新的挑戰!為了我所心愛的人,不斷努力,不斷奮鬥,永不停息前進的腳步!
因為交接工作基本完成,所以這幾天一直在等放假!閒來無事,就看看java基礎。看到抽象類和介面的知識點時,突然想起自己當年在面試過程中遇到過。細細想想有些問題模糊不清,所以根據俄自己的理解,寫了個關於抽象類和介面的比較的例子。希望能對初學者有些幫助。由於本人能力有限,寫的不足之處希望大家能夠諒解!嘿嘿!有點扯多了,書歸正傳!
1、抽象類(abstract class)
- 抽象類和抽象方法都是由abstract進行修飾的。
- 抽象類不能夠進行例項化。
- 抽象方法只能宣告,不能進行實現。也就是說沒有方法體。
- 含有抽象方法的類必須是抽象類。
- 繼承抽象類的子類,必須實現所有抽象類中的方法,否則這個子類依然是抽象類。
2、介面(interface)
- 所有方法都是抽象的。只能宣告,不能進行實現。
- 所有變數都是常量。
值得注意的是,有些面試的時候會出一些挑錯的題。由於在學習時,忽略了一些不常用的知識點,所以在筆試的時候一定要注意細節,介面中是可以宣告變數的,但是必須給這個變數賦值。同時,抽象類是可以存在一般方法的,也可以宣告成員變數。繼承抽象類,除了抽象方法必須重寫之外,也可以對父類中的一般方法進行重寫。
3、例子
Person抽象類:
package com.alex.test; /** * 抽象類 * @author Alex */ public abstract class Person { public String name; public int age; //設定資訊的方法,定義為抽象方法,抽象方法必須在子類中進行實現 public abstract void setInfo(String name,int age); //定義了一個一般方法 public void getInfo() { System.out.println("名字是:" + this.name); System.out.println("年齡是:" + this.age); } }
醫生子類Doctor:
package com.alex.test;
/**
* 醫生子類類
* @author Alex
*/
public class Doctor extends Person {
/**
* 實現setInfo方法,這個是Person抽象類的方法
*/
@Override
public void setInfo(String name,int age) {
super.age = age;
super.name = name;
}
}
測試類:
package com.alex.test;
/**
* 測試類
* @author Alex
*/
public class Test {
public static void main(String[] args) {
Doctor doctor = new Doctor();
doctor.setInfo("Doctor",20);
doctor.getInfo();
}
}
然後新增一個Profession介面。同時,Doctor類實現這個介面,並繼承Person抽象類。
Profession介面:
package com.alex.test;
/**
* 職業介面
* @author Alex
*/
public interface Profession {
//在介面中定義變數的話,預設就是public static final修飾,也就是說介面中的成員變數都是常量
String professionName = "醫生";
public void getProfessionName();
}
Doctor類:
package com.alex.test;
/**
* 醫生實現類
* @author Alex
*/
public class Doctor extends Person implements Profession {
/**
* 實現setInfo方法,這個是Person抽象類的方法
*/
@Override
public void setInfo(String name, int age) {
super.name = name;
super.age = age;
}
/**
* 實現getProfessionName方法,這個是Profession介面的方法
*/
@Override
public void getProfessionName() {
//因為professionName是常量,所以使用類名.變數名方式引用
System.out.println("職業是:" + Profession.professionName);
}
}
在測試類中增加一行程式碼:
doctor.getProfessionName();
執行之後的結果就可以看到:
名字是:Doctor
年齡是:20
職業是:醫生
本篇博文內容比較基礎,希望大家多多包涵!