从头认识java-6.6 final(3)-方法

来源:转载

这一章节我们来说一下final修饰的方法。

1.final与public

其实,使用final修饰方法,只不过就是不想继承的时候被修改。

一般我们继承的时候都可以覆盖public的方法,如下:

package com.ray.ch06;public class Sub extends Father { @Override public void say() { }}class Father { public void say() { }}
上面的代码我们在sub里面覆盖重写了say方法。


但是如果我们使用final修改方法,在sub里面就不可以重写。

package com.ray.ch06;public class Sub extends Father { // @Override // public void say() {//抛异常 // }}class Father { public final void say() { }}

2.final与private

由于private方法天生就不可以被重写,因此,private方法都是默认有final修饰的。

package com.ray.ch06;public class Sub { private final void say() { System.out.println("method say"); } private final void say(int id) { System.out.println("method say"); System.out.println("id:" + id); } public static void main(String[] args) { Sub sub = new Sub(); sub.say(); sub.say(2); }}
输出:

method say
method say
id:2

3.综合

我们下面再举一个例子,里面包含了public和private的方法。

package com.ray.ch06;public class Sub extends Father { public final void say() { System.out.println("method say"); } public static void main(String[] args) { Sub sub = new Sub(); sub.say(); Father father = new Sub(); }}class Father { private final void say() { System.out.println("method say"); }}
乍看上去,以为sub重写了say,但其实没有,因为在father里面say是private,对外不公开,即便是子类,那么,对于子类的say而言,就不是覆盖重写father的say,因此,在引用Sub类型来new的时候,可以调用say方法,但是向上转型为father的时候,却不可以。


总结:这一章节主要讨论了final与private或者public方法结合时候的应用。


这一章节就到这里,谢谢。

-----------------------------------

目录






分享给朋友:
您可能感兴趣的文章:
随机阅读: