Abstract 和 Interface 使用的举例+Abstract 和 Interface也可以放到一起

本文仅把接口和抽象类的实现与继承情况下各个强制覆盖重写的情况举个例子。

比对1:

接口类 Interface1

接口类Interface2继承抽象类1,并增加抽象方法

结论:抽象类只能继承抽象类,且不会强制重写父类中的方法

比对2:

抽象类Abstract3实现接口类Interface2,并增加抽象方法和普通方法各一个

结论:抽象类实现接口类不会强制重写所有父类以及父类的父类的方法,但是特别的,如果抽象类没有覆盖重写父类的抽象方法,那么子类就需要强制重写,如果抽象类已经重写了父类的抽象方法,则子类无需强制重写父类抽象方法。

!接口类无法直接继承抽象类或者普通类

比对3:

普通类Class4继承抽象类3

结论:强制重写直接父类抽象类的方法,如果抽象类有 implements 其他接口,且未实现抽象方法,那么普通类 Class4 需要强制重写接口中的抽象方法。

对比4:

普通类6继承抽象类6

结论:继承抽象类,且将抽象类作为直接父类,直接父类的抽象方法被强制重写

对比5

普通类实现 抽象接口类-<泛型>

结论:实现  抽象接口类-<泛型>,接口不论是否是抽象的都会被重写

对比6

抽象类a extends 抽象类b

抽象类a 不会被要求覆盖重写抽象类b的抽象方法

超级总结:

抽象类可以 implements 接口,且可以选择是否实现接口的抽象方法。

抽象类的子类如果是抽象类,则不会强制覆盖重写抽象类的抽象方法,或者抽象类 implements 接口中的抽象方法。

抽象类的子类如果是普通类,则会强制覆盖重写抽象类的抽象方法,当抽象类 implements 接口中的抽象方法没有在抽象类中覆盖重写时,抽象类的子类会强制覆盖重写implements 接口中的抽象方法。

此外,类和类不可以被循环继承

现附上代码

1、Interface1

package com.demo.daotest;

public interface Interface1 {
	void M1to1();

}

2、Interface2

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();
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值