黑马程序员技术交流社区

标题: final和abstract小结 [打印本页]

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

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

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

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

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

所以子类的方法必须覆盖父类的抽象方法。方法才能够起作用。
作者: x277402301t    时间: 2014-12-29 23:10
总结的很好,给力!
作者: 只会金克斯    时间: 2014-12-29 23:21
最后一句话不一定吧,非抽象类继承一个含抽象方法的抽象类,非抽象类重写抽象类里面的抽象方法不就可以了吗?
也就是子类重写抽象方法就不会报错了吧

作者: 叫我王大锤    时间: 2014-12-29 23:53
感谢楼楼
作者: 陈强fly    时间: 2014-12-30 00:25
总结的很不错,分享了,学着学着就学迷了,好像非抽象类也是可以继承抽象类的,只要重写抽象类中所有的抽象方法。
作者: l763631191    时间: 2014-12-30 00:26
;P不错!!!!
作者: 7788665544    时间: 2014-12-30 00:35
private void print(){};此语句表示方法的空实现。
Abstract void print(); 此语句表示方法的抽象,无实现。

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

+1                     
作者: lixing123456    时间: 2014-12-30 12:45
不错。。。。。。。。。。。。
作者: 李增宽    时间: 2014-12-30 23:35
不错。。。。。。
作者: 努力的橘子    时间: 2014-12-30 23:41
还不错~~
作者: yedaiwang    时间: 2014-12-31 09:20
gangxuedao zhe
作者: dede风    时间: 2014-12-31 12:19
学习学习,谢谢.




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2