黑马程序员技术交流社区
标题:
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