今天不小心继承一个类型的时候把其中的一个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 就说这么多了~