java什么时候用抽象类,什么时候用接口

关于什么时候用抽象类,什么时候用接口,我在这里做一下总结。

首先看下面的例子:

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();

         ...

}


上面这个学生抽象类中有三个方法,学习,睡觉,抽烟。我们知道任何一个学生都要学习,都要睡觉,但是不是

每个学生都要抽烟呢?这显然是不合理的。难道说创建一个学生对象,就一定要强加给他抽烟的方法?就像一个

学生来了,就一定要他会抽烟?女生也不放过?哈哈!这显然是很荒唐的事情。

于是我们做如下调整:

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 Smoking{

   

 }


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

总结:抽象类中通常放的是类种事物(对象)共有的属性和方法,于是它的子类继承它的时候

就自然有了其所有属性和方法,当有些方法是某种子类特有的时,就应该将这个方法分离出来,

以附加的形式(implements)添加进去。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值