我阅读了很多关于“界面”和“抽象类”的帖子
基本上,当我们谈论对象的特征时,我们使用“抽象类”。
当我们讨论对象能够做什么时,我们使用“接口”。
但它仍然令人困惑,所以我为自己做了一个练习的例子。
所以现在我想到了一个物品'货物;
public abstract class cargo {
protected int id;
public abstract int getWidth(int width);
public abstract int setWidth(int width);
public abstract int setHeight(int h);
public abstract int getHeight(int h);
public abstract int setDepth(int d);
public abstract int getDepth(int d);
public abstract int volume(int w,int h,int d);
public int getId(){
return this.id;
}
public abstract int setId();
public abstract void setBrand();
public abstract void getBrand( );
.....so on , still have a lot of characteristic of a cargo
}
//in the other class
public class usaCargo extends cargo{
....
private
}
所以这里几乎没有关于我的设计的问题。
1.因此,在真正的编程项目世界中,我们实际上是在做什么吗?对我来说,我认为这是好的设计,我们符合货物的基本特征。
如果我们设置“私有id”,那么我们实际上不能在任何子类中使用“id”这个变量,因为它是私有的,所以这意味着我们在抽象类中定义的每个变量都必须是public / protected
有人可以提供一些合适的例子,以便我的货物可以实现一些界面吗?
public interface registration{
public void lastWarrantyCheck();
}
但这里似乎不合适......
我们通常不在界面内定义变量,是吗?
我试图在OOP上获得更多的感觉。原谅我的长期问题。
答案 0 :(得分:1)
答案 1 :(得分:1)
您可以在Abstract类中定义变量,以便抽象类中定义的方法具有要使用的变量。这些变量的范围取决于您希望具体类如何访问这些变量:
private
。
protected
。
public
。
Cargo对象可能实施的合理界面可以是Shippable,如同如何将货物从源移动到目的地。有些货物可以通过货运列车运输,有些货物可以通过飞机等运输。具体的类别可以实施Shippable并确定货物的运输方式。
public interface Shippable {
public void ship();
}
最后,接口中定义的变量必须是public static,final意味着它是一个常量变量。
希望这能为你解决这个问题!
答案 2 :(得分:1)
抽象类中的变量可以声明为protected
,它们只能在其中和任何扩展类中使用。在扩展类中永远不能访问Private
个变量。
接口提供了实现它们的类所需的函数列表。例如,您可以使用接口hasWarranty来定义对象处理与保修相关的活动所需的所有功能。
public interface hasWarranty {
public void lastWarrantyCheck();
public void checkWarranty();
}
然后,任何需要执行保修相关活动的对象都应该实现该接口:
// Disclaimer: been away from Java for a long time, so please interpret as pseudo-code.
// Will compile
public class Car implements hasWarranty {
public void lastWarrantyCheck() {
... need to have this exact function or program won't compile ...
}
public void checkWarranty() {
... need to have this exact function or program won't compile ...
}
}
// Missing one of the required functions defined in hasWarranty
public class Bus implements hasWarranty {
public void lastWarrantyCheck() {
... need to have this exact function or program won't compile ...
}
}
实际上,只有常量作为接口中声明的变量是不可变的,并且由实现该接口的所有对象共享。它们隐含着“静态最终”。