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

关于JAVA继承、多态、抽象类、接口等性质的学习(3)

时间:2015-10-14 17:43:20      阅读:212      评论:0      收藏:0      [点我收藏+]

标签:

抽象类:abstract class

接口:interface

 

      在java的类中,只要有一个方法为抽象方法,那么该类就是抽象类。换句话说,抽象类可以提供部分方法的具体实现,这一点在接口中是不被允许的。

接口中,只能够有方法的定义,而不能有方法体。

 

      关于抽象类和接口,很容易看出来它们并不能对对象进行实例化操作,那么它们的唯一存在意义就是拿来继承用的。假如说一个继承了抽象类的类,如果没有将父类的抽象方法全部实现,那么它仍然是一个抽象类。

抽象类中的抽象方法必须是public或者protect的(默认为public),这很容易想明白,如果抽象方法是private的话,那么子类就不能重写该方法,因而就没有意义了。其实,抽象类中可以定义具体的方法还是一个

很不错的优点的,举个栗子,当你想为某个模块添加一个新功能时,你只需要在抽象类中添加一个方法具体实现,那么继承这个抽象类的所有实现类都轻而易举的拥有了这个方法。

 

      说完抽象类,感觉跟接口差不多啊,可以这样理解,接口要比抽象类更加抽象,并且定义更加严格。

      接口中的属性和方法分别被隐式的修饰为public static final和public abstract,当然一般情况下是不建议在接口中放置属性的。假如说要在接口中添加一个新的抽象方法,那么实现这个接口的所有类都必须实现

该抽象方法,这一点要比抽象类要麻烦得多。

 

      说了这么多,再来比较一下接口和抽象类的区别吧。

      java是单继承机制的语言(C++是多继承的),因此当一个实现类继承一个抽象类是,它的类型就比较单一。而接口则不同,如果一个类实现了一个接口的所有抽象方法,那么该类就拥有此接口

的类型,而且一个类可以实现多个接口,因此这个类就有了更多的类型。

还有一个区别,那就是在抽象类中可以有静态方法和静态变量,而接口是不允许的。

 

      那么到底应该在什么时候用他们呢,个人是这样理解的,抽象类和子类的关系更偏向于”是或者不是的关系“,更倾向于一些固有属性,比如说人肯定是有”两只手两只脚“之类的属性。而接口和子类的关系则偏向于”有

或者没有的关系“,比如说这个人带了一顶帽子,那个人却没带。

      在网上找到了一个很有趣的例子

     interface Window{
             public void draw();
             public void putColor();
             public void setPosition();
      }
 
  
     abstract class DesignedPage implements Window{
             public void draw(){}
             public void putColor(){}
     }
     

      public class DesingedPageA  extends DesignedPage{
             public void setPosition(){
                   //set the window position
             }   
    }

这里接口有三个方法,但是作为该模块内部的一个对象,我只想用他的setposition()方法,其他的我并不想看到,那就可以这样来做:

 

1.创建一个抽象类Designedpage,然后我们把不想看到的方法draw()和putcolor()加上去,方法体设置为空(实际上这样写表明已经

在抽象类中实现了这两个方法)。

 

2.然后忽略掉想要实现的方法setposition(),此时应为该类是抽象类并不用完全实现该接口。

 

3.在该抽象类的实现类中再实现setposition()方法,这样便可方便的实现了所需的功能。

 

从这里也可以看出,抽象类是”对内“的,而接口是”对外“的,用于创造一个统一的对外口径。

 

      之所以能这样写,是因为抽象类是不能被实例化的,所以没有要求实现所有的方法。但是没写出的方法还是隐式的存在的。
当你在定义一个实现类继承抽象类的话,就必须要全部实现。

 

参考资料:http://fishswing.iteye.com/blog/1527166

 

关于JAVA继承、多态、抽象类、接口等性质的学习(3)

标签:

原文地址:http://www.cnblogs.com/crispker/p/4877839.html

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