Abstract 和 Interface 使用的舉例+Abstract 和 Interface也可以放到一起
阿新 • • 發佈:2018-12-31
本文僅把介面和抽象類的實現與繼承情況下各個強制覆蓋重寫的情況舉個例子。
比對1:
介面類 Interface1
介面類Interface2繼承抽象類1,並增加抽象方法
結論:抽象類只能繼承抽象類,且不會強制重寫父類中的方法
比對2:
抽象類Abstract3實現介面類Interface2,並增加抽象方法和普通方法各一個
結論:抽象類實現介面類會強制重寫所有父類以及父類的父類的方法。
!介面類無法直接繼承抽象類或者普通類
比對3:
普通類Class4繼承抽象類3
結論:強制重寫直接父類抽象類的方法,但是抽象類實現的介面類的方法沒有強制重寫
對比4:
普通類6繼承抽象類6
結論:繼承抽象類,且將抽象類作為直接父類,直接父類的抽象方法被強制重寫
對比5
普通類實現 抽象介面類-<泛型>
結論:實現 抽象介面類-<泛型>,介面不論是否是抽象的都會被重寫
超級總結:
介面類內的方法會累加,且最後實現最後一個介面類的類要強制重寫所有介面方法。
抽象類只有本類中的抽象方法會強制重寫。
當使用abstract修飾interface時,該類依舊是介面類,內部方法可以使用abstract修飾,但是無法寫方法體
此外,類和類不可以被迴圈繼承
現附上程式碼
1、Interface1
2、Interface2package com.demo.daotest; public interface Interface1 { void M1to1(); }
package com.demo.daotest;
public interface Interface2 extends Interface1 {
void M2to1();
}
3、Abstract3
package com.demo.daotest; public abstract class Abstract3 implements Interface2 { public void M2to1() { // TODO Auto-generated method stub } public void M1to1() { // TODO Auto-generated method stub } abstract void M3to1(); void M3to2(){ } }
4、Class4
package com.demo.daotest;
public class Class4 extends Abstract3 {
@Override
void M3to1() {
// TODO Auto-generated method stub
}
}
5、Abstract5
package com.demo.daotest;
public abstract class Abstract5 {
abstract void M5to1();
abstract void M5to2();
}
6、Class6
package com.demo.daotest;
public class Class6 extends Abstract5 {
@Override
void M5to1() {
// TODO Auto-generated method stub
}
@Override
void M5to2() {
// TODO Auto-generated method stub
}
}
7、AbstractInterface7
package com.demo.daotest;
import java.io.Serializable;
public abstract interface AbstractInterface7<T extends Serializable, PK extends Serializable>{
void M7to1();
abstract void M7to2();
}
8、Class8
package com.demo.daotest;
import java.io.Serializable;
public class Class8<T extends Serializable,PK extends Serializable> implements AbstractInterface7<T, PK> {
public void M7to1() {
// TODO Auto-generated method stub
}
public void M7to2() {
// TODO Auto-generated method stub
}
}
9、Abstract 修飾 interface
AbstractInterface
package com.demo.daotest;
public abstract interface AbstractInterface {
abstract void M10to1();
}