今天不小心继承一个类型的时候把其中的一个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 就说这么多了~
分享到:
相关推荐
- 如果父类方法的访问级别是`protected`,子类可以将其改为`public`,但不能改为`private`或默认(即无访问修饰符)。 - **原因**:更严格的访问级别可能会导致其他类无法访问到该方法,从而破坏原有的程序逻辑。 ...
1. **可见性修饰符**: 当子类`SubBase`继承自父类`Base`时,父类中的所有`public`和`protected`方法都可以被子类访问。如果父类的方法为默认访问级别(即没有任何修饰符,相当于`package-private`),则只有当子类与...
继承是 Java 中的一种机制,允许子类继承父类的属性和方法,並且可以对父类的方法进行重写或重载。动态绑定是指在运行时确定方法的调用,而不是在编译时。多态性是通过继承和方法重写来实现的。 一、继承 继承是 ...
在同一个包中,子类可以继承父类的非 private 修饰的成员变量和方法,而在不同包中,子类可以继承父类的 public 和 protected 修饰的成员变量和方法。 继承的好处包括代码重用、简化代码和提高代码的可维护性等。...
构造方法的访问权限遵循Java的访问修饰符规则,可以是`public`、`protected`、`private`或默认(包访问)。这决定了构造方法能被哪些代码调用。通常,子类能够访问父类的受保护和公共构造方法。 总结,Java子类构造...
如果父类的方法是`protected`,子类可以将其重写为`protected`或`public`,但不能降低为`private`。 在重写方法时,子类可以拥有不同的参数数量。例如,子类的构造函数可以增加额外的参数,如`$age`,来适应更具体...
- 子类继承父类时,默认只能继承公有(`public`)和受保护(`protected`)的成员,而不能继承私有(`private`)成员。因此,正确答案是 **C. 子类可以继承父类的公有的属性和方法**。 8. **继承声明** - **题目**: 现有...
3. 访问修饰符的限制一定要大于被重写方法的访问修饰符(public>protected>default>private)。 方法重载(Overload)是指在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义。调用方法时...
文章可能包含了创建类、定义构造函数、覆盖父类方法(方法重写)、访问控制修饰符(public, private, protected)以及如何在子类中调用父类构造器(使用`super`关键字)等实践案例。这些知识点在实际编程中经常遇到...
- 访问权限:子类可以访问父类的所有`public`和`protected`方法。如果子类和父类不在同一个包内,父类的`default`(默认)访问权限的方法将不可访问。 - `super`调用父类方法:在子类中可以使用`super`关键字调用被...
封装是面向对象编程的重要特性,它通过访问控制修饰符(public、protected、default、private)来保护数据并控制对其操作的访问权限。继承允许子类继承父类的属性和方法,增强了代码的复用性。多态是指一个父类引用...
此外,重写方法的访问权限不能低于被重写方法的权限,比如父类的`public`方法不能被子类的`protected`或`private`方法重写。 重写还有以下规则: 1. `final`方法不能被重写。 2. `static`方法不能被重写,但可以在...
- 子类继承了父类后,拥有父类的所有非私有属性和方法,但不能直接访问私有属性和方法,需通过父类提供的公共方法访问。 - 子类最多只能直接继承一个父类,Java中遵循单继承机制。 - 所有类都间接或直接地继承自...
继承是指子类继承父类的成员变量和方法,从而实现代码复用。多态是指一个对象可以以多种形式出现,例如重载和重写。 二、继承 继承是指子类继承父类的成员变量和方法。在 Java 中,继承可以单继承,也可以多继承。...
子类可以访问父类的public和protected成员,但不能访问private成员。如果子类与父类在同一包内,子类还可以访问父类的友元(friendly)成员。对于私有属性或方法,子类可以通过公共或受保护的方法间接访问。 **子类...
5. **访问权限不得降低**:如果父类中的方法具有public或protected访问权限,那么子类中的覆盖方法至少应保持相同的访问级别。例如,如果父类中的方法是public的,子类中的覆盖方法也必须是public的。 6. **不能...
而当子类继承自父类的相同方法,输入数据一样,但要做出有别于父类的响应时,你就要覆盖父类方法, 即在子类中重写该方法——相同参数,不同实现(动态多态性) 复制代码 public class Base { void test...
子类可以访问父类中所有的非私有(`public`和`protected`)成员,包括字段和方法。如果没有显式指定父类,那么默认父类是`java.lang.Object`,这意味着所有类都直接或间接继承自`Object`。 【Java 多态】 多态性是...
子类继承了父类的所有非私有(public和protected)属性和方法。例如,`ClassTwo`继承自`ClassOne`,因此`ClassTwo`可以访问`ClassOne`的非私有成员。 2. **super关键字**:在Java中,`super`关键字用于引用父类的...