抽象类和接口

接口是公开的,里面不能有私有的方法或变量,是用于让别人使用的,而抽象类是可以有私有方法或私有变量的, 

另外,实现接口的一定要实现接口里定义的所有方法,而实现抽象类可以有选择地重写需要用到的方法,一般的应用里,最顶级的是接口,然后是抽象类实现接口,最后才到具体类实现。 

还有,接口可以实现多重继承,而一个类只能继承一个超类,但可以通过继承多个接口实现多重继承,接口还有标识(里面没有任何方法,如Remote接口)和数据共享(里面的变量全是常量)的作用. 

关于什么时候用抽象类,什么时候用接口,我在这里做一下总结。
首先看下面的例子:
Java代码
1. abstract class
AbstractStudent{

abstract void study();

void sleep(){

 System.out.println("sleep");

 }


 void smoke(){

System.out.println("抽烟");

}

 }

 //所有的Student被创建都会抽烟,是不是很搞笑?


class Student extends AbstractStudent{
Student Demo stu = new Student();

...

 }

上 面这个学生抽象类中有三个方法,学习,睡觉,抽烟。我们知道任何一个学生都要学习,都要睡觉,但是不是每个学生都要抽烟呢?这显然是不合理的。难道说创建 一个学生对象,就一定要强加给他抽烟的方法?就像一个学生来了,就一定要他会抽烟?女生也不放过?哈哈!这显然是很荒唐的事情。于是我们做如下调整:
Java代码

 abstract class AbstractStudent{

abstract void study();

 void sleep(){

 System.out.println("sleep");

 }

 }

 interface Smoking{


void smoke();

 }

//普通的学生,继承AbstractStudent,有学习、睡觉的方法,不抽烟

class Student extends
AbstractStudent{


 }


//抽烟的学生,除了继承AbstractStudent中的方法,还会抽烟

class SmokeStudent extends AbstractStudent implements Smokeing{



Java代码
1. 这样,就把抽烟的同学和不抽烟的同学分离开了。
现在你感觉到了抽象类与接口的不同点了吗?

总结:抽象类中通常放的是类种事物(对象)共有的属性和方法,于是它的子类继承它的时候
就自然有了其所有属性和方法,当有些方法是某种子类特有的时,就应该将这个方法分离出来,
以附加的形式(implements)添加进去。

这种实现方式基本上能够明确的反映出我们对于问题领域的理解,正确的揭示我们的设计意图。其实abstract class表示的是"is a"关系,interface表示的是"like a"关系,大家在选择时可以作为一个依据,当然这是建立在对问题领域的理解上的,比如:如果我们认为AlarmDoor在概念本质上是报警器,同时又具有Door的功能,那么上述的定义方式就要反过来了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值