访问控制修饰符控制的重写方法可以改变值吗
时间: 2024-01-06 16:04:38 浏览: 23
访问控制修饰符控制的是访问权限,它并不会影响方法的重写。也就是说,重写方法的访问权限可以与被重写方法的访问权限不同,只要重写方法的访问权限不低于被重写方法的访问权限即可。
举个例子,假设有一个Animal类和其子类Dog类,Animal类中有一个protected修饰的eat()方法,Dog类想要重写此方法,并将其访问权限改为public,那么这样是允许的,因为public访问权限不低于protected访问权限。
示例代码:
```
class Animal {
protected void eat() {
System.out.println("Animal is eating");
}
}
class Dog extends Animal {
@Override
public void eat() { // OK,重写方法的访问权限改为public
System.out.println("Dog is eating");
}
}
```
需要注意的是,重写方法的返回值类型必须与被重写方法的返回值类型相同或其子类型(即协变返回类型)。否则会导致编译错误。详细的解释可以参考我之前回答的问题。
相关问题
kotlin 所有的修饰符
Kotlin 提供了多种修饰符,用于控制变量、函数和类的行为和可见性。以下是一些常见的 Kotlin 修饰符:
1. `val` 和 `var`:用于声明变量。`val` 修饰符用于常量,一旦赋值后就不能改变。`var` 修饰符用于可变变量,可以随时修改。
2. `private`、`protected` 和 `public`:这些是访问修饰符,用于控制变量、函数和类的可见性。`private` 修饰符将一个元素隐藏在其所属的类中,只能在类内部访问。`protected` 修饰符增加了元素在其子类中的可见性,可以在类和其子类之间访问。`public` 修饰符则允许在任何地方访问。
3. `lazy`:这个修饰符用于声明一个延迟加载的变量,只有当第一次使用该变量时才会进行计算。
4. `abstract`:这个修饰符用于声明一个抽象类或抽象函数,不能被实例化。
5. `final`:这个修饰符用于声明一个不能被继承的类或函数,一旦赋值后就不能改变。
6. ` Companion`:这个修饰符用于类本身,表示该类是一个单例,只有一个实例。
7. `sealed class`:这个修饰符用于定义一个可能的子类被限定集合的类。
8. `override` 和 `lateinit`:这两个修饰符分别用于指示一个函数可以被子类重写,和一个变量可以在没有初始化之前被使用。
这些修饰符可以根据你的需求来选择使用,以实现不同的编程效果。请注意,某些修饰符可能在 Kotlin 的不同版本中有所不同或已被弃用。建议查阅 Kotlin 的官方文档以获取最准确的信息。
java方法重写选择题
1. 下列哪个关键字用于重写一个方法?
A. override
B. final
C. static
D. abstract
答案:A
2. 下列哪个修饰符可以用于重写一个方法?
A. public
B. private
C. protected
D. final
答案:A、B、C
3. 在子类中重写一个父类方法时,访问修饰符可以有哪些改变?
A. 可以改为更严格的修饰符
B. 可以改为更宽松的修饰符
C. 可以不做改变
D. 不能改变访问修饰符
答案:A
4. 下列哪个方法不能被重写?
A. 静态方法
B. 私有方法
C. final方法
D. 抽象方法
答案:B、C
5. 下列哪个方法不能被重载?
A. 静态方法
B. 私有方法
C. final方法
D. 抽象方法
答案:B、C