java final private_Java final与private

首页 > 基础教程 > 关键字 > 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原创文章,未经本站允许不得转载。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值