首页 > 基础教程 > 关键字 > final关键字
Java final与private
1. 类中所有的private方法都隐式的指定为final的,由于无法取用private方法,所以也就无法覆盖它,可以对private方法添加final修饰符,但并没有添加任何额外意义。
2. 使用final方法的原因是把方法锁定,以防任何继承类修改它的含义。同时如果父类中的这个方法使用了private那么在子类也是不能重写这个方法。实例代码如下:
package com.game.lll;
public class FinalOverriding {
class WithFinals {
private final void a()
{
System.out.println("WithFinals a");
}
private void b()
{
System.out.println("WithFinals b");
}
}
class OverridingFinal extends WithFinals{
private final void a()
{
System.out.println("OverridingFinal a");
}
private void b()
{
System.out.println("OverridingFinal b");
}
}
class OverridingFinal2 extends OverridingFinal{
private final void a()
{
System.out.println("OverridingFinal2 a");
}
private void b()
{
System.out.println("OverridingFinal2 b");
}
}
private OverridingFinal2 of2 = new OverridingFinal2();
public static void main(String[] args) {
FinalOverriding finalOverriding = new FinalOverriding();
finalOverriding.of2.a();
finalOverriding.of2.b();
OverridingFinal of = finalOverriding.of2;
of.a();
of.b();
WithFinals wf = of;
wf.a();
wf.b();
}
}
运行结果:
+------------------------------------------------------------------+
OverridingFinal2 a
OverridingFinal2 b
OverridingFinal a
OverridingFinal b
WithFinals a
WithFinals b
+------------------------------------------------------------------+
从结果上来看,子类OverridingFinal和OverridingFinal2都没有重写父类方法。在Java中类中private方法只能在供内部访问,所以子类是无法覆盖它。对private方法添加final和不加结果都是一样并没有任何意义。。下面对它做一些修改
第一步:将WithFinals的方法a()改为public
public final void a()
{
System.out.println("WithFinals a");
}
第二步:将OverridingFinal的方法a()也改为public
public final void a()
{
System.out.println("OverridingFinal a");
}
结果是编译错误:
+------------------------------------------------------------------+
Cannot override the final method from FinalOverriding.WithFinals
+------------------------------------------------------------------+
将private修改为public后,结果证明使用final修饰的方法是不能被重写的。如果我们把OverridingFinal和OverridingFinal2的b()方法改为public呢?那么OverridingFinal2方法b将会覆盖OverridingFinal的方法b。运行结果如下:
运行结果:
+------------------------------------------------------------------+
OverridingFinal2 a
OverridingFinal2 b
OverridingFinal a
OverridingFinal2 b
WithFinals a
WithFinals b
+------------------------------------------------------------------+
版权声明:本文为JAVASCHOOL原创文章,未经本站允许不得转载。