複習9:抽象類

抽象類

抽象類是什麼

簡單地說,抽象類就是被abstract修飾的類


抽象類的作用

提取子類中的公共方法,但是不提供具體的實現


抽象類有什麼

  • 構造器

  • 普通屬性

  • 普通方法

  • 抽象方法(用abstract修飾的方法)

    • 使用abstract修飾方法
    • 沒有方法體

注意1:抽象類與普通類的區別

  • 使用abstract修飾類
  • 多了抽象方法

注意2:抽象類雖然有構造器,但是不能用抽象類創建對象,其意義在於子類繼承之後,由子類實現抽象類的抽象方法,從而體現多態(向上造型)。

注意3:抽象類的繼承與普通繼承一樣具有傳遞性:如果子類不想實現父類的抽象方法,那麼子類也可以成爲抽象類,由下一代來實現(爺爺的願望—>父親無法完成—>孫子繼承爺爺的願望)


抽象類的簡單示例

package day20191106;

public abstract class AbstrClass {
   	//普通變量
	int a;
	int b;
    
    //構造器
	public AbstrClass() {
		
	}
    
    //普通方法
	public void method() {
		
	}
    
    //構造方法
	public abstract void abstrMethod();
}

package day20191106;

public class Demo01 extends AbstrClass{

	@Override
	public void abstrMethod() {
		// TODO Auto-generated method stub
		
	}
	
}

關於抽象類的一些小tip

  • 抽象類不一定有抽象方法
  • 有抽象方法的類一定是抽象類
  • 抽象方法的意義在於被繼承,而不是被調用
  • abstract不能和final一起使用
    • 被final修飾的類不能被繼承、被final修飾的方法不能被重寫,這與抽象類的意義衝突
  • 抽象類可以有構造器,但是不能被實例化
    • 通過子類的向上造型來實例化

接口

接口是什麼

接口是特殊的抽象類,特殊之處如下:

  • 不使用abstract修飾,而使用interface修飾,且沒有class關鍵字
  • 內部沒有普通屬性,只有常量(默認添加public、static、final,且只能在聲明的同時初始化)
  • 內部沒有普通方法,只能有抽象方法,且方法聲明時不用寫abstract和訪問控制符,接口會默認給所有方法添加abstract和public(因此也不存在構造器)
  • 接口不能被繼承,只能被子類實現

接口的意義

  • 規範動作
  • 擴展功能

接口的使用

  • 關鍵字:implements,表示當前類實現該接口

注意1:接口的實現與繼承不同

  • 繼承:一個子類只能繼承一個父類
  • 接口:一個子類可以同時實現多個接口,一個接口也可以被多個子類實現

注意2:extends可以與implements一起使用,但是繼承必須在實現接口之前

  • 所有類都默認繼承了Object,即使是實現接口的子類也不例外

注意3:接口可以繼承接口(extends),且一個接口可以繼承多個接口

接口的簡單示例

接口1

package day20191106;

//接口1
public interface InterClass1 {
	
	void method();
}

接口2

package day20191106;

//接口2
public interface InterClass2 {
	int a = 0;
	int b = 0;
	
	void method1();
	void method2();
	
}

子類同時實現接口1和接口2

package day20191106;

//子類同時實現接口1和接口2,如果有更多的接口需要實現,只需要用“,”分割多個接口
public class Demo02 implements InterClass1,InterClass2{

	@Override
	public void method1() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void method2() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void method() {
		// TODO Auto-generated method stub
		
	}   
}

子類繼承抽象類AbstrClass,同時實現接口1和接口2

package day20191106;

//extends與implements共同使用
public class Demo02 extends AbstrClass implements InterClass1,InterClass2{

	@Override
	public void method1() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void method2() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void method() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void abstrMethod() {
		// TODO Auto-generated method stub
		
	}
	
}

接口繼承接口

package day20191106;

import java.awt.event.KeyListener;
import java.awt.event.MouseListener;

//接口繼承接口(一對多)
public interface InterClass1 extends MouseListener,KeyListener{
	
	void method();
}


對比

普通類、抽象類、接口的區別

普通類 抽象類 接口
構造器
普通屬性
常量
普通方法
抽象方法
父、子類關係 extends extends implements
創建對象的方式 直接創建或者子類向上造型 子類向上造型 子類向上造型

繼承與實現

繼承extends 實現implements
類-類 1-1
類-接口 1-N
接口-類
接口-接口 1-N 1-N

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