【趣说java】之java抽象类和接口

 

1.抽象类

莱特兄弟发明了世界上第一架战斗机,实现了人类的飞天梦,发明了飞机以后啊,有一对菜特兄弟就想在飞机上按上武器什么机枪,大炮之类的。想在自己飞在天上,别人打不到自己,自己还能打别人,多爽啊。可惜的是兄弟俩对武器不了解,按不上去啊。。,于是只能作罢,但是兄弟俩,把自己的想法写进了飞机图纸里,希望后人来实现,后来人们接受了他们的思想,造出了各式各样的战斗机(子类),上面都安装了武器。当年菜特兄弟对战斗机的构想就是抽象类。

抽象类说白了就是一个子类的模板,后代战斗机不管在怎么变,也脱离不了携带武器这一特性,菜特兄弟的构想就是战斗机的模板就是抽象类,而他们当年设想的武器攻击 就是抽象方法 因为你的战斗机按机枪也好,挂核弹也罢,攻击都是你绕不开的方法。

抽象类和抽象方法的规则

  1. 抽象类,抽象方法必须用abstract修饰,有抽象方法的类一定为抽象类,抽象类里可以有普通方法。
  2. 抽象类不能被实例化
  3. 抽象类可以包含 成员变量,方法,构造器,初始化块,内部类。
  4. 抽象类只能被继承,不能做子类(人家菜特兄弟的想法可是完全自己想,没有参考资料的)
  5. 继承抽象类后,必须实现抽象方法(你说你的飞机是战斗机,却没有武器攻击方法,咋地想全靠撞啊???,所有必须实现武器攻击这一抽象方法
  6. abstract方法必须子类实现才有意义,所有不能是private(你有好想法,藏着掖着干啥!)所有abstract和private不能同时用。

 

2 接口

前面说过战斗机有攻击,所有的战斗机的有攻击这个方法,类比一下鸟类,鸟会飞,所有咱们就定义一个鸟的抽象类就ok了呗,所有鸟继承抽象鸟类,都实现飞的方法,挺简单的啊,和接口有什么关系吗??大家请看看这货

一只鸵鸟??

这家伙不会飞啊。。。那怎么办,把它开除鸟籍?说它不是鸟?好像也不行,看来问题出在这个特性上,总不能定义一个飞的抽象类去叫能飞的鸟继承吧,java世界里也不能怎么(不符合现实世界逻辑)。既然如此,为何不定义一种技能呢,定义技能,谁想飞就给谁飞这个技能呗。 飞这项技能便是接口。

 

接口的规则:

  1. 接口可以包含成员变量(只能是public static final型),方法(只能是抽象方法,类方法,默认方法,实例方法),内部类。
  2. 接口可以继承,会得到父类的所有抽象方法和常量。
  3. 接口可以多继承。
  4. 一个类可以继承一个抽象类和实现(implements)多个接口,弥补java单继承的缺点。

接口的继承。

鹦鹉继承鸟抽象类且添加飞的技能

 

3 抽象类与接口的区别

   语法层面上的区别

  1)抽象类可以提供成员方法的实现细节,而接口中只能存在public abstract 方法;

  2)抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的;

  3)接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法;

  4)一个类只能继承一个抽象类,而一个类却可以实现多个接口。

   设计层面上的区别将在下一章【趣说java】之抽象类与接口的区别中详细解答。

 

 

征得本博客作者同意的情况下,本博客的作品允许非盈利性引用,并请注明出处:“作者:____转载自____”字样,以尊重作者的劳动成果。版权归原作/译者所有。未经允许,严禁转载

 

 

 

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值