----------------------android培训、java 培训、期待与您交流! ----------------------
抽象和接口,这两个含义,好容易弄混淆,不知道什么时候用谁,不过找到个例子
就懂啦,事物相同属性就用抽象,事物个别属性,就用接口,不知道这样理解对不对呢
抽象
抽象类就是不能使用new方法进行实例化的类,即没有具体实例对象的类。抽象类有点类似“模板”的作用,目的是根据其格式来创建和修改新的类。对象不能由抽象类直接创建,只可以通过抽象类派生出新的子类,再由其子类来创建对象。当一个类被声明为抽象类时,要在这个类前面加上修饰符abstract。
在抽象类中的成员方法可以包括一般方法和抽象方法。抽象方法就是以abstract修饰的方法,这种方法只声明返回的数据类型、方法名称和所需的参数,没有方法体,也就是说抽象方法只需要声明而不需要实现。当一个方法为抽象方法时,意味着这个方法必须被子类的方法所重写,否则其子类的该方法仍然是abstract的,而这个子类也必须是抽象的,即声明为abstract。
抽象类中不一定包含抽象方法,但是包含抽象方法的类一定要被声明为抽象类。抽象类本身不具备实际的功能,只能用于派生其子类。抽象类中可以包含构造方法,但是构造方法不能被声明为抽象。
抽象类不能用final来修饰,即一个类不能既是最终类又是抽象类。
abstract不能与private、static、final、native并列修饰同一个方法。
接口
接口中的成员修饰符是固定的。
•成员常量:public static final
•成员函数:public abstract
接口,用于多重继承,也不能实例化。只能包含static final的成员变量,不过在interface中一般不定义成员变量。而成员方法在接口里只能是抽象方法,访问权限只能是public。
例子:
不同的门都具有本质特征动作open(), close()。那么抽象类和接口都可以定义这两个方法。现在要求它具有报警alarm功能。
1) 如果这3个功能都放在抽象类里面,那么所有的门都具备了这3个功能,无疑不妥,有的门不需要报警功能!
2) 如果这3个功能都放到接口里面,需要用到报警功能的其他类,就需要实现门的open和close功能,这样子也不对
所以,应该把门的open,close和alarm分离,让所有的门都有open, close动作,继承抽象类Door。而需要添加报警功能的门,则再继承接口Alarm。
abstract class Door
{
abstract void open(); //打开
abstract voidclose();//关闭
}
interface Alarm {
void alarm();//报警
}
class AlarmDoor extends Door implementsAlarm //继承门实现报警
{
void open() { … }
void close() { … }
void alarm() { … }
}
抽象类就是类的本质特征,共同的;接口是个性化的,你想让类更具个性化,则继承其他相应个性特征的接口
----------------------android培训、java 培训、期待与您交流! ----------------------
详细请查看:http://edu.csdn.net/heima