Java 使用接口的抽象类或公共方法
Java 使用接口的抽象类或公共方法,java,inheritance,methods,interface,abstract-class,Java,Inheritance,Methods,Interface,Abstract Class,Shape.java public interface Shape { String draw(); void calcSomething(); } public class Square implements Shape { @Override public String draw() { return "SQUARE"; } @Override public void calcSomething() {
Shape.java
public interface Shape {
String draw();
void calcSomething();
}
public class Square implements Shape {
@Override
public String draw() {
return "SQUARE";
}
@Override
public void calcSomething() {
}
}
Square.java
public interface Shape {
String draw();
void calcSomething();
}
public class Square implements Shape {
@Override
public String draw() {
return "SQUARE";
}
@Override
public void calcSomething() {
}
}
当我实现一个接口时
,我实现的方法必须是public
我想将draw()
设为公共方法,但calcSomething()
设为私有或受保护的方法
我经历过
. 没有直接的方法可以做到这一点
所以我计划使用抽象类,而不是使用接口
Shape.java
使用抽象类
public abstract class Shape {
abstract public String draw();
abstract protected void calcSomething();
}
public class Square extends Shape {
@Override
public String draw() {
return "SQUARE";
}
@Override
protected void calcSomething() {
}
}
Square.java
实现Shape
抽象类
public abstract class Shape {
abstract public String draw();
abstract protected void calcSomething();
}
public class Square extends Shape {
@Override
public String draw() {
return "SQUARE";
}
@Override
protected void calcSomething() {
}
}
我应该选择哪一个。我应该使用接口并将calcSomething()
公开还是应该使用抽象类并将calcSomething()
保护引用:
实现一个接口可以使一个类在其承诺提供的行为方面变得更加正式。接口在类和外部世界之间形成契约
为了让外部世界访问这些方法,它们必须是公开的
如果您不希望该方法是公共的,即可从外部世界调用,那么它不属于接口
如果希望calcSomething()
可以从Shape
中的其他代码调用,则。。。哎呀,Shape
中没有其他代码。这是一个界面。好的,如果您想从
Square
中的其他代码调用calcSomething()
,则需要它是一个抽象(或存根)方法。例如,这就是工作原理。引用:
实现一个接口可以使一个类在其承诺提供的行为方面变得更加正式。接口在类和外部世界之间形成契约
为了让外部世界访问这些方法,它们必须是公开的
如果您不希望该方法是公共的,即可从外部世界调用,那么它不属于接口
如果希望calcSomething()
可以从Shape
中的其他代码调用,则。。。哎呀,Shape
中没有其他代码。这是一个界面。好的,如果您想从
Square
中的其他代码调用calcSomething()
,则需要它是一个抽象(或存根)方法。例如,它就是这样工作的。观点:我会使用第二个,以便能够将形状坐标本身存储在列表中。但是抽象类只有在您希望存储此形状的信息,同时为继承类的抽象实现留出空间时才有意义。作为一个侧节点,如果我正在读取方法draw
,我宁愿希望它绘制一些东西,而不是仅仅返回一个字符串。我可能会考虑重命名这个方法来表示它真正在做什么。为什么<代码> CalcStuts<代码>私有如果它在接口中?我有不同的类来实现形状。它们都使用相同的方法名来计算某些东西。我只是想在接口上添加该方法@鲁茨哈拉巴尼。我这样想可能是错误的。如果我不高兴,请纠正我wrong@KevinEsche这只是一个例子。你能给我发送编辑请求吗?@AmanTuladhar这听起来不对。您需要重写该方法。为什么要保密?您正在为您的API(接口)编写一个实现。观点:我将使用第二个实现,以便能够将形状坐标本身存储在列表中。但是抽象类只有在您希望存储此形状的信息,同时为继承类的抽象实现留出空间时才有意义。作为一个侧节点,如果我正在读取方法draw
,我宁愿希望它绘制一些东西,而不是仅仅返回一个字符串。我可能会考虑重命名这个方法来表示它真正在做什么。为什么<代码> CalcStuts<代码>私有如果它在接口中?我有不同的类来实现形状。它们都使用相同的方法名来计算某些东西。我只是想在接口上添加该方法@鲁茨哈拉巴尼。我这样想可能是错误的。如果我不高兴,请纠正我wrong@KevinEsche这只是一个例子。你能给我发送编辑请求吗?@AmanTuladhar这听起来不对。您需要重写该方法。为什么要保密?您正在为API(接口)编写一个实现。