A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Hello_Boys 中级黑马   /  2014-12-29 23:07  /  1766 人查看  /  14 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

final并不涉及继承,继承取决于类的修饰符是否为private、default、protected还是public。也就是说,是否继承取决于这个方法对于子类是否可见。
Abstract(抽象)可以修饰类、方法
如果将一个类设置为abstract,则此类必须被继承使用。此类不可生成对象,必须被继承使用。
Abstract可以将子类的共性最大限度的抽取出来,放在父类中,以提高程序的简洁性。
Abstract虽然不能生成对象,但是可以声明,作为编译时类型,但不能作为运行时类型。
Final和abstract永远不会同时出现。

当abstract用于修饰方法时,此时该方法为抽象方法,此时方法不需要实现,实现留给子类覆盖,子类覆盖该方法之后方法才能够生效。

注意比较:
private void print(){};此语句表示方法的空实现。
Abstract void print(); 此语句表示方法的抽象,无实现。

如果一个类中有一个抽象方法,那么这个类一定为一个抽象类。
反之,如果一个类为抽象类,那么其中可能有非抽象的方法。

如果让一个非抽象类继承一个含抽象方法的抽象类,则编译时会发生错误。因为当一个非抽象类继承一个抽象方法的时候,本着只有一个类中有一个抽象方法,那么这个类必须为抽象类的原则。这个类必须为抽象类,这与此类为非抽象冲突,所以报错。

所以子类的方法必须覆盖父类的抽象方法。方法才能够起作用。

评分

参与人数 1黑马币 +3 收起 理由
杨佳名 + 3

查看全部评分

14 个回复

倒序浏览
总结的很好,给力!
回复 使用道具 举报
最后一句话不一定吧,非抽象类继承一个含抽象方法的抽象类,非抽象类重写抽象类里面的抽象方法不就可以了吗?
也就是子类重写抽象方法就不会报错了吧
回复 使用道具 举报 1 0
感谢楼楼
回复 使用道具 举报
总结的很不错,分享了,学着学着就学迷了,好像非抽象类也是可以继承抽象类的,只要重写抽象类中所有的抽象方法。
回复 使用道具 举报
;P不错!!!!
回复 使用道具 举报
private void print(){};此语句表示方法的空实现。
Abstract void print(); 此语句表示方法的抽象,无实现。

这个不错!
回复 使用道具 举报
Eagle 高级黑马 2014-12-30 08:22:00
8#
我就看了第一句话。。。。。楼主啊,我有点蛋蛋的忧伤。。。;P
我觉得被final修饰的类不能被继承。
而且,与修饰符没有太大关系的。类不能用private修饰
final修饰的方法不能被覆盖
final修饰的变量时常量,只能赋值一次。
楼主你认为呢??。。。。。。。。。。。。。。。
我只是路人甲,。。。看法不对请指出。:D
回复 使用道具 举报
如果让一个非抽象类继承一个含抽象方法的抽象类,则编译时会发生错误。因为当一个非抽象类继承一个抽象方法的时候,本着只有一个类中有一个抽象方法,那么这个类必须为抽象类的原则。这个类必须为抽象类,这与此类为非抽象冲突,所以报错。 这句话表述有点问题吧
回复 使用道具 举报
noiary 高级黑马 2014-12-30 12:39:05
10#
Eagle 发表于 2014-12-30 08:22
我就看了第一句话。。。。。楼主啊,我有点蛋蛋的忧伤。。。
我觉得被final修饰的类不能被继承。
而且, ...

+1                     
回复 使用道具 举报
不错。。。。。。。。。。。。
回复 使用道具 举报
李增宽 来自手机 中级黑马 2014-12-30 23:35:15
12#
不错。。。。。。
回复 使用道具 举报
努力的橘子 来自手机 中级黑马 2014-12-30 23:41:50
13#
还不错~~
回复 使用道具 举报
gangxuedao zhe
回复 使用道具 举报
学习学习,谢谢.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马