Java开发之abstract 和 interface的区别

Java开发abstract 和 interface的区别

java开发里面经常会用到虚函数和接口,这两者的区别是什么呢?

abstract: 子类里面只能继承一个父类
interface: 子类可以实现多个接口

那什么时候用abstract,什么时候用interface呢?
当某个子类和父类是 is a关系时,比如一个亚洲人是一个人,那么一个亚洲人的子类可以继承一个人的父类。
当子类和父类是like a关系时,比如一个美洲超人像一个超人,超人的能力不是每个人都有的,所以不是所有人的属性,我们不能把超能力归于人的父类,这时就可以用interface
代码例子:

public abstract class Man {
	public abstract void eat();
}    

public interface SuperPower {
	public void superPower();
}

public class AsiaMan extends Man {	
	@Override
	public void eat() {
	System.out.println("亚洲人用筷子吃");
	}
}   

public class AmericanSuperMan extends Man implements SuperPower {
	public void superPower() {
	System.out.println("美国超人会飞");
	}
	@Override
	public void eat() {
	System.out.println("美国人用刀叉吃");
	}
}

public static void main(String[] args) {
		
	Man anAsiaMan = new AsiaMan();
	AmericanSuperMan anAmericanSuperMan = new AmericanSuperMan();
	
	anAsiaMan.eat();
	anAmericanSuperMan.eat();	
	anAmericanSuperMan.superPower();
}   

运行结果:
美国人用刀叉吃
美国超人会飞
亚洲人用筷子吃
正确的使用abstract和interface有利提高代码可读性,当人们看到extend时就会知道这是一个is a什么,看到implement时可以知道这个类有什么特性like a

posted on 2016-06-24 11:34  士多啤梨苹果橙  阅读(1162)  评论(1编辑  收藏  举报

导航