趣味Java之面向对象六 (趣味Java系列作者:就业部王成房老师)
剧情回顾:
上一集说到了面向对象关于方法的重写,重写就相当于覆盖,重写过后,子类的对象再进行调用的时候就调用的是覆盖过后的方法,重写的格式:返回值,方法名,参数列表,必须一模一样。
本集剧情:
抽象类中的抽象方法
啥是抽象类啊抽象方法啊??
来我们看下上一章的代码 继续看下子类的代码 继续 我们来看测试类
然后我们看下运行结果
以上结果 可以看的出来我们的结果都来自于重写的方法 那么问题来了!
我们在父类中的方法,就是吃鸡腿的方法,用到了么??? 好像每个人都没有吃鸡腿诶~~~~ 那么我们想一个问题,既然我们从来就没用这个吃鸡腿的输出语句,那么我们还用写么? 你们:不用!! 意思是写成这样?
嗯好 这样编译也是通过的,但是既然我们连逻辑都不写,我们能不能方法体也不写呢?
方法体是什么鬼?? 我:.....................方法体就是两个大括号啊!
你们:哦~~~~,哪到底能不能不写呢??
我:好吧我们来试一试!!看代码
所以说这种语法是不行的,那么怎么办呢?
不要谎,伟大的java为我们提供了抽象方法这个东西,什么是抽象方法,就是使用关键字,abstract修饰的方法就是抽象方法,抽象方法就不需要些方法体。
来我们来看下 怎么写:
大家来看,我前面加了abstract,为什么还是报错呢?
是这样的 这是一个重点概念大家一定要重点去记忆:抽象方法必须存在于抽象类中!!!
大家记住了么?
你们:我们只想问抽象类是个什么鬼?? 我:这就是我解下来要说的点,抽象类就是被abstract 修饰的类,来大家看代码:
大家看上面的代码,把父类 变成抽象的,里面的方法就可以不用写方法体了!
大家再看下我们的这个代码
看上面的代码,我们创建了一个父类出来,但是好像并没有用父类创建对象,那么我们的
抽象类就规定了一个概念:既然不用父类创建对象那么抽象类就不能创建对象!!
我们试一下,看代码: 所以抽象类是不能创建对象的,因为你们也不用他,所以就规定死了, 然后从字面解释也可以,创建对象也叫实例化,抽象的怎么能变成实际的呢???
以上概念一定要记熟。 那么我们再看一下,我们是不是没个类都重写了eat()方法呢?
恩,看来每个类都重写这个方法,如果我不重写呢? 上面的代码显示,没有重写抽象方法报错,所以父类的抽象方法必须被每个子类重写!!
然后我们想一下,抽象类的存在意义什么?? 你们:啊??? 我:听为师慢慢道来~~ 我们发现上面的写的抽象类,里面的抽象方法都是子类拥有的但是回去重写,所以抽象类就是用来被继承,抽象方法就是每个子类所共有的一些方法,抽取成抽象方法写在父类中,用来保证每个子类必须都拥有,然后让子类去重写。 其实意义就几个字:就是用来被实现。
总结:
以上就抽象类的知识点,现在总结一下,抽象类和抽象方法都是被abstract修饰的,然后抽象方法必须存在于抽象类中,而抽象类中不一定都是抽象方法,因为还有get和set方法嘛,这些都是普通方法。重点记住,抽象类不能创建自己的对象!
|