今天详细的看了看抽象类和接口的相关知识,平常使用接口比较多,这里就写写自己对抽象类的理解。
抽象类与接口最大的区别是抽象类中可以有对方法的实现,而接口中智能对方法的模型进行定义,不允许有任何的方法实现。
举个例子,
public abstract Animal
{
public void eat(Food food)
{
// do something with food....
}
public void sleep(int hours)
{
try
{
// 1000 milliseconds * 60 seconds * 60 minutes * hours
Thread.sleep ( 1000 * 60 * 60 * hours);
}
catch (InterruptedException ie) { /* ignore */ }
}
public abstract void makeNoise();
}
定义一个抽象类动物,其中有两个方法eat()和sleep(),这两个方法是我认为动物都具有的,可以定义为一般的方法,在继承时子类自动拥有。而makeNoise()方法我认为是每个动物各有不同(声音不同),就用一个抽象方法去定义它,类似于接口中方法的定义。那么如果有一个种类的动物继承这个动物类,如:
public Dog extends Animal
{
public void makeNoise() { System.out.println ("Bark! Bark!"); }
}
像dog这个类,那么继承animal后,它自动拥有了animal类中eat()和sleep()这两个方法的实现。但是他必须自己实现makeNoise()这个抽象方法的具体内容,发出狗的声音。
总而言之,抽象类比接口增加了方法的实现,对于抽象子类的公有方法非常有利。但是同样的,一个抽象类的定义比接口的定义更加耗费资源。如何选择,根据实际而定。
参考资料:
如果打不开,请看我的另一篇转载博客http://blog.youkuaiyun.com/abstractcodes/article/details/76549366