子类继承父类后重载protected方法提升访问权限为public

1 篇文章 0 订阅
1 篇文章 0 订阅

今天不小心继承一个类型的时候把其中的一个protected的方法写成了public,开始的时候没有发现,后来突然想起来这个方法应该是不提供给访问者的,那么检查竟然发现java编译器允许了这样的行为。
想一想,这样的设计还算蛮合理的。

设想有下面的情况:
某汽车公司有一款新车上市,但该公司规定这款车必须由公司内部人员驾驶,那么也就是这样

public class NewCar{

	protected void drive() {
	// drive the car
	}
}

 不过你说我买来一辆车总不能让这汽车公司的人来为我开车吧,所以这车的驾驶功能应该对我开放了才行,当然,只有属于我的车我才可以这样做,所以

class MyNewCar extends NewCar {

	@Override
	public void drive() {
	// do my own drive
	}

}

 这样,我自己的车就可以让任何人来驾驶了,包括借给哥们,或者送给女朋友(她们可能更希望你开车带她去兜风)

NewCar car = new NewCar();
car.drive();// no no no 这车可不是我的,不能随便开的
MyNewCar myCar = new MyNewCar();
myCar.drive();// ok 随便开,别超速哦~
  所以呢,java设计这个可以提高权限的做法就是为了让子类可以自己去决定它的方法是否可以开放给调用者。

当然了,你如果把原本父类public的方法给protected了,那么很抱歉,编译不通过的。原因显而易见,比如:

NewCar car = new MyNewCar();
car.drive();// 这这这,这车是我的啊,怎么还不让我开?对不起,你有证据么 -_-#
  OK 就说这么多了~
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值