关于private final修饰符(private final void inf(){})

关于final或 private修饰父类中某方法,子类不可重写此方法,但关于private final修饰的方法,似乎可以进行覆盖,我们看以下代码

class Parents{
	private final void doit(){
		System.out.println("parent:doit");
	}
	final void doit2(){
		System.out.println("parent:doit2");
	}
	public void doit3(){
		System.out.println("parent:doit3");
	}
}

class Sub extends Parents{
	public final void  doit(){
		System.out.println("sub:doit");
	}
	public final void  doit3(){
		System.out.println("sub:doit3");
	}
}
public class FinalMethod {
	public static void main(String[] args) {
		Sub s=new Sub();
		s.doit();
		Parents p=s;
		//p.doit();     这里不能运行,所以注释掉
		p.doit2();
		p.doit3();
	}
}

 

在这段代码中,由于动态绑定,p的实际类型是子类的,然后调用方法是先到子类中找,doit2在父类中找到,属于向上查找,而doit3属于重写,

然后我们回头看doit方法,doit如果是重写的话,是可以运行的,但他不能运行,所以不是重写,而是生成了一种新的方法,由于doit并没有覆盖父类中的doit,但是他们函数名相同,所以p.doit并不能运行,它并不是正常覆盖,类是继承的,但是他的方法并不属于重写,也不属于自身扩展父类的方法(父类中存在),正是既与父类中有同名的方法,但是并没有进行重写。所以导致了他的不可运行


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值