Sri*_*.V. 19 java abstract-class private
我知道private在abstract类中声明方法不是一个好的编码实践.即使我们无法创建abstract类的实例,为什么类中的private访问修饰符可用abstract,它在abstract类中的范围是什么?在哪种情况下是类中private使用的访问说明符abstract?
看看这个代码,其中Vehicleclass是abstract并Car 扩展Vehicle.
package com.vehicle;
abstract class Vehicle {
// What is the scope of the private access modifier within an abstract class, even though method below cannot be accessed??
private void onLights(){
System.out.println("Switch on Lights");
}
public void startEngine(){
System.out.println("Start Engine");
}
}
Run Code Online (Sandbox Code Playgroud)
Within是创建Car类的相同包
package com.vehicle;
/*
* Car class extends the abstract class Vehicle
*/
public class Car extends Vehicle {
public static void main(String args[]){
Car c = new Car();
c.startEngine();
// Only startEngine() can be accessed
}
}
Run Code Online (Sandbox Code Playgroud)
And*_*anu 39
由于抽象类可以包含功能(而不是接口),因此它可以包含私有变量或方法.
在你的例子中,你可能会做类似的事情
public void startEngine(){
injectFuel();
igniteSpark();
// etc. my understanding of engines is limited at best
System.out.println("Start Engine");
}
private void injectFuel() {}
private void igniteSpark() {}
Run Code Online (Sandbox Code Playgroud)
这样你可以将一些工作传播到其他方法(所以你没有1000行startEngine方法),但你不希望孩子能够单独调用injectFuel,因为它在外面没有意义startEngine的上下文(你想确保它只在那里使用).
或者甚至更多你可能有一个私有方法,在其他几个公共方法中调用,具有不同的参数.这样您就可以避免在每个公共方法中编写相同的代码两次或更多次,并将公共代码分组为私有方法,确保子代不访问它(就像他们之前不能只调用公共方法的一部分一样) ).像这样的东西:
public void startEngine() {
dishargeBattery(50);
System.out.println("Start Engine");
}
public void startRadio() {
dischargeBattery(20);
}
private void dischargeBattery(int value) {
battery.energy -= value; //battery should probably be a private field.
}
Run Code Online (Sandbox Code Playgroud)
这样你的方法可以访问电池,但是孩子们不应该弄乱它,并且你不会battery.energy -= value在它们中写入相同的行().请注意,这些都是非常简单的例子,但如果dischargeBattery是500行方法,那么用其他方法编写它将是一件麻烦事.
它与非抽象类中的相同,没有区别.
这意味着如果你的抽象类中没有任何东西调用私有方法,那么你也可以删除它,因为它不会被调用(禁止一些邪恶的反射工作).
通常,私有方法仅用作内部实用程序方法,这些方法具有类中其他方法用于完成其工作的非常特定的任务.
| 归档时间: |
|
| 查看次数: |
23271 次 |
| 最近记录: |