黑马程序员技术交流社区

标题: final问题 [打印本页]

作者: 于清云    时间: 2012-4-27 11:39
标题: final问题
本帖最后由 于清云 于 2012-4-28 18:13 编辑

视频里说 被final修饰的方法不可以被覆盖,被final修饰的类不可以被继承,但是方法又不是类,所以父类中的方法能不能跟被final修饰的父类一样也不可以被继承呢?

作者: 邓斌    时间: 2012-4-27 11:43
方法怎么有继承这说话呢?呵呵。你拿什么东西来继承方法

作者: Friends★    时间: 2012-4-27 11:47
函数的两个特性,重载和覆盖,别的好像没有,没有听过什么继承
作者: 于清云    时间: 2012-4-27 11:48
邓斌 发表于 2012-4-27 11:43
方法怎么有继承这说话呢?呵呵。你拿什么东西来继承方法

继承 不就是子类继承父类里的所有属性 方法 吗?
作者: 邓斌    时间: 2012-4-27 11:51
于清云 发表于 2012-4-27 11:48
继承 不就是子类继承父类里的所有属性 方法 吗?

恩,是子类继承父类,不是子类方法继承父类方法,这个要弄明白,子类方法要么复写父类方法,没有子类方法继承父类方法这说法,只有子类继承父类,拥有父类的方法。
作者: liqian    时间: 2012-4-27 11:51
final标记所有通用功能,不能随意更改。
final的基本规则:
1.final类不能被继承。
2.final成员变量只允许赋值一次,且只能通过构造方法里赋值。
3.final局部变量即为常量,只能赋值一次。
4.final方法不允许被子类覆盖。
5.final一般用于标记那些通用性的功能,不能随意修改。
作者: 于清云    时间: 2012-4-27 11:54
邓斌 发表于 2012-4-27 11:51
恩,是子类继承父类,不是子类方法继承父类方法,这个要弄明白,子类方法要么复写父类方法,没有子类方法 ...

OK了 我问的有歧义 改正了
作者: 于清云    时间: 2012-4-27 11:58
liqian 发表于 2012-4-27 11:51
final标记所有通用功能,不能随意更改。
final的基本规则:
1.final类不能被继承。

我的疑问是第4点 final方法能不能被子类继承?
作者: 光sail    时间: 2012-4-27 12:01
final 关键字:final 可以修饰属性、方法、类。
final 修饰类:当一个类被final 所修饰时,表示该类是一个终态类,即不能被继承。
final  修饰方法:当一个方法被final  所修饰时,表示该方法是一个终态方法,即不能被重写(Override)。
final 修饰属性:当一个属性被final 所修饰时,表示该属性不能被改写。
当final  修饰一个原生数据类型时,表示该原生数据类型的值不能发生变 (比如说不能从10 变为20);如果final  修饰一个引用类型时,表示该引用类型不能再指向其他对象了,但该引用所指向的对象的内容是可以发生变化的。
对于final 类型成员变量,一般来说有两种赋初值方式:
a) 在声明final 类型的成员变量时就赋上初值
b) 在声明final 类型的成员变量时不赋初值,但在类的所有构造方法中都为其赋上初值。
作者: 于清云    时间: 2012-4-27 13:42
我已经知道了 谢谢各位大虾了啊 这是我自己做的例子:
class Fu
{
        final void show()
        {
                System.out.println("fu");
        }
}

class Zi extends Fu
{
        void show1()
        {
                System.out.println("zi");
        }
}

class  Demo
{
        public static void main(String[] args)
        {
                Zi zi = new Zi();
                zi.show();
        }
}

运行结果是:

E:\>javac Demo.java

E:\>java Demo
fu

这说明了:父类中的方法被final修饰后,还是可以被子类继承的。
作者: liqian    时间: 2012-4-27 13:57
于清云 发表于 2012-4-27 13:42
我已经知道了 谢谢各位大虾了啊 这是我自己做的例子:
class Fu
{

你这个例子只是在子类中重新定义一个方法而已,并没覆盖父类的方法!
作者: 于清云    时间: 2012-4-27 14:02
本帖最后由 于清云 于 2012-4-27 14:06 编辑
liqian 发表于 2012-4-27 13:57
你这个例子只是在子类中重新定义一个方法而已,并没覆盖父类的方法!

首先 我想研究的问题不是覆盖的问题 覆盖视频里讲了 我也测试了 加final不可以覆盖 我这研究的是父类中final修饰的方法能不能像正常父类方法被子类继承一样啊 答案是可以
作者: 胡奎    时间: 2012-4-27 17:01
final修饰的类不可以别继承,为最终类,不可修改
final修饰的方法为最终方法,不可以被重写。
当非fianl类中的方法被final修饰时,继承该非final累的子类不可以重写父类中的final方法
作者: 于清云    时间: 2012-4-27 20:59
胡奎 发表于 2012-4-27 17:01
final修饰的类不可以别继承,为最终类,不可修改
final修饰的方法为最终方法,不可以被重写。
当非fianl类 ...

哥们 其实我发这个帖子只是想研究 final对父类中方法继承的影响而已 结果是没有影响
作者: 孙天    时间: 2012-4-27 21:06
1,final是一个修饰符,可以修饰类,方法,变量(成员,局部)
2,final修饰的类不可以被继承
3,final修饰的方法不可以被覆盖
final是严谨性的表现
4,final修饰的变量是常量,只能被修饰一次

作者: 于清云    时间: 2012-4-27 21:12
孙天 发表于 2012-4-27 21:06
1,final是一个修饰符,可以修饰类,方法,变量(成员,局部)
2,final修饰的类不可以被继承
3,final修饰 ...

大虾们啊 我知道final的用法 注意我要研究的问题啊
作者: 黑马等我!    时间: 2012-4-28 00:02
被final修饰的类是不能被继承的。如果类没被final修饰而方法被final修饰的话,方法是可以被继承的,但是不可以被覆写。而没被final修饰的方法既可以被继承,又可以被覆写。
作者: 付左军    时间: 2012-4-28 17:42
"所以父类中的方法能不能跟父类一样也不可以被继承呢?"你这句话是想说什么?
继承父类,即是继承父类中的可以被继承的变量,方法,父类不能被继承,还谈什么父类的方法继承?,想不被继承就加final么
作者: 付左军    时间: 2012-4-28 17:45
于清云 发表于 2012-4-27 20:59
哥们 其实我发这个帖子只是想研究 final对父类中方法继承的影响而已 结果是没有影响 ...

final对父类中方法的继承没影响?子函数继承父类是为了覆写,你可知被final修饰的方法不能被覆写?
作者: 于清云    时间: 2012-4-28 18:13
付左军 发表于 2012-4-28 17:42
"所以父类中的方法能不能跟父类一样也不可以被继承呢?"你这句话是想说什么?
继承父类,即是继承父类中的 ...

所以父类中的方法能不能跟被final修饰的父类一样也不可以被继承呢 其实我想问的意思是这个意思 我去纠正问题
作者: 于清云    时间: 2012-4-28 18:17
付左军 发表于 2012-4-28 17:45
final对父类中方法的继承没影响?子函数继承父类是为了覆写,你可知被final修饰的方法不能被覆写? ...

final用法我知道 我研究的不是覆盖问题 是final对子类继承父类中方法的影响。




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