抽象类和接口总结:
定义和实现方式:
抽象类:可以有方法申明也可以有实现
public abstract class AbstractTest {
public void test1()
{
}
public abstract void test2();
}
public class ExtendAbstractTest1 extends AbstractTest{
public void test2() {
//实现
}
}
接口:只能有申明
public interface InterfaceTest {
public static int a=1;
public void test();
public void test2();
}
public class ImplementIntfaceTest implements InterfaceTest{
public void test() {
// TODO Auto-generated method stub
}
public void test2() {
// TODO Auto-generated method stub
}
}
接口和抽象类都什么时候用:
虽然很多时候我们都说Java是因为不支持多继承,所以才会出现了接口,但是实际上:abstract class和interface是Java语言中的两种定义抽象类的方式,虽然它们之间有很大的相似性。但是对于它们的选择却又往往反映出对于问题领域中的概 念本质的理解、对于设计意图的反映是否正确、合理,因为它们表现了概念间的不同的关系(虽然都能够实现需求的功能)。
那我们什么时候用接口什么时候用抽象类?
个人觉得其实abstract class表示的是"is a"关系,也就是当有这种概念上的抽象对象,比如报警门本质上是门,这样的时候用。
interface表示的是"like a"关系,这里是添加新的功能的时候用的,比如你要是理解你的门有报警的功能,like 报警器。
大家在选择时可以作为一个依据。
接口和抽象类总结:
相同点:都不可以被实例化。如果一个类A去实现接口或者继承抽象类,要是不能实现接口或抽象类中的所有方法,那么这个类也只能是抽象的类。
不同点:
| 接口 | 抽象类 |
实例化 | 不能被实例化,如果要实例化,接口变 量必须指向实现所有接口方法的类对 象。 | 不能被实例化,如果要实例化,抽象类变量必须指向实现所有抽象方法的子类对象。 |
实现方式 | 接口要被类实现implements | 抽象类要被子类继承extends |
变量 | 变量默认是Public static final, 所以在实现了接口的类中也不能修改, 通常我们也不会在接口里定义变量。 | 普通变量 |
方法 | 必须是Public ,且所有方法隐含是抽 象的。接口中方法只能做申明,不能有 实现。 | 抽象方法要被继承和实现所以不能是static和private。 且抽象类中可以有方法申明也可以有实现。 |
|
| 抽象类中可以没有抽象方法,但是有抽象方法的类一定是抽象类。 |
|