码迷,mamicode.com
首页 > 编程语言 > 详细

Java基础知识强化18:抽象类、接口的区别 和 抽象类可以不实现接口的全部方法

时间:2015-09-07 09:27:36      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:

抽象类和接口的区别

  抽象类里面可以有非抽象的方法,接口里只能有抽象方法。

  抽象类中的抽象方法声明时不能有大括号,而接口中的所有方法都没有大括号。
 
 抽象类(abstract class):

  a.抽象类是仅供派生的类,无法实例化一个抽象类,只能实例化从它派生的类。

  b.抽象类的主要特征在于它包含抽象成员(abstract member),抽象成员是不具有实现的一个方法或属性,其作用是强制所有派生类提供实现。

  c.由于抽象成员应当是要被重写(override)的,因此这类成员会自动成为virtual成员,而且不能这样显示地声明。

  d.抽象成员不能是private的,否则派生类看不见他们。

 
接口(interface):

  a.接口是抽象类的变体。

  b.接口的一个关键特征是它既不包含实现,也不包含数据。

  c.字段(也就是数据)不能出现在一个接口中,如果一个接口要求派生类包含特定的数据,那么它会使用属性而不是字段。由于属性不会包含任何实现作为接口声明的一部分,所以他不会引用一个支持字段。

  d.接口的宗旨是定义由多个类共同遵守的一个契约,所以接口中所有成员都必须为public类型。

 

抽象类可以不用实现接口的全部方法

  有的时候需要将接口和抽象类配合起来使用,这样可以为开发者提供相当的便利性,开发者觉得哪个方便就选用哪个。这样的抽象类称为便利类。此时,便利类并不需要实现接口的所有方法,可以留给继承它的子类去实现它们。

  这么做并非是没有意义的,当你自己写的类想用接口中个别方法的时候(注意不是所有的方法),那么你就可以用一个抽象类先实现这个接口(方法体中为空),然后再用你的类继承这个抽象类,这样就可以达到你的目的了,如果你直接用类实现接口,那是所有方法都必须实现的。

e.g1:

interface ITest { 
          void test1(); 
          void test2();
}
public abstract class Test implements ITest {
//抽象类不用全部实现接口中的所有方法 
         public void test1() { 
              System.out.println("test1!!");
          }
 }

class TestChild extends Test { 
//上面接口ITest 中剩余的方法test2,在该抽象类Test 的子类TestChild 去实现即可。 
          public void test2() { 
              System.out.println("test2!!");
          }
 }

e.g2:

interface ITest { 
          void test1(); 
          void test2();
          void test3();
}
public abstract class Test implements ITest {
//抽象类实现那些不想实现的接口方法,实现体为空
         public void test1() { }
         public void test2() { }

 }

class TestChild extends Test { 
//抽象类Test的子类去实现我们想要的实现的接口方法 
          public void test3() { 
              System.out.println("test3!!");
          }
 }

 

Java基础知识强化18:抽象类、接口的区别 和 抽象类可以不实现接口的全部方法

标签:

原文地址:http://www.cnblogs.com/hebao0514/p/4787951.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!