Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javaoop继承与接口_Java_Oop - Fatal编程技术网

javaoop继承与接口

javaoop继承与接口,java,oop,Java,Oop,我有几个关于java中oop的问题 我明白,is-a关系意味着继承 我理解,可以关系意味着我需要实现接口 这里出现了问题: 现在,如果我有更多的变量,例如: 在类方->内部侧; 在类矩形->整数宽度,整数高度。。。。等等 如果我按照建议的好做法去做,即创建一个接口实例 Shape s = new Square(); 然后我无法访问实例变量侧 所以,我不得不依靠这样的东西: Square s = new Square(); s.side = 3; s.draw(); Dog d = ne

我有几个关于java中oop的问题

我明白,is-a关系意味着继承

我理解,可以关系意味着我需要实现接口

这里出现了问题:

现在,如果我有更多的变量,例如:

在类方->内部侧; 在类矩形->整数宽度,整数高度。。。。等等

如果我按照建议的好做法去做,即创建一个接口实例

Shape s = new Square();
然后我无法访问实例变量

所以,我不得不依靠这样的东西:

Square s = new Square();
s.side = 3;
s.draw(); 
Dog d  = new Dog();
d.teeth = 30; 
  • 那么,我的设计是错误的吗
  • 实现接口的类是否应该只具有接口所具有的方法,而不具有用于调用的其他方法
  • 在继承的情况下也会出现同样的问题。 例如:

    现在,如果我尝试这样的方法:

    Square s = new Square();
    s.side = 3;
    s.draw(); 
    
    Dog d  = new Dog();
    d.teeth = 30; 
    
    狗有自己的变数,如牙齿、腿和眼睛

    Animal a = new Dog();
    a.teeth = 30; // will not work
    

    按照这样的做法是否正确:

    Square s = new Square();
    s.side = 3;
    s.draw(); 
    
    Dog d  = new Dog();
    d.teeth = 30; 
    
    所以,我遗漏了一些设计细节?请解释一下

    我正在尽我最大的努力去做正确的设计。只是偶然发现了这些东西

    到目前为止,您的设计是正确的。具体回答您的问题:

    那么,我的设计是否不正确否-就目前而言,它是正确的。

    实现接口的类是否应该只具有接口所具有的方法,而不具有用于调用的其他方法否-它可以也可能会有其他方法。否则,实现接口的所有类都是相同的。

    你只会做:

    Shape s = new Square();
    
    如果要在s上执行可应用于任何形状的操作(例如绘制)

    如果需要执行
    Square
    特定操作,则需要使用
    Square
    变量。没有什么可以说你必须使用一个超级类

    我建议你继续你的设计,找到一些真实的单词例子,然后它会变得更清晰

    更新:

    请注意,
    new
    操作可能会在工厂内使用。类似地,设置属性(如边数)将(或可能)发生在工厂方法内部。工厂总是需要知道他们正在处理的确切类型

    在工厂之外,事情可以更一般

    因此,有一条规则可能有助于您的设计(但不是硬性的和快速的),那就是在工厂中使用特定的类,而在工厂之外使用
    Shape
    类。

    您的设计是正确的(到目前为止)。具体回答您的问题:

    那么,我的设计是否不正确否-就目前而言,它是正确的。

    实现接口的类是否应该只具有接口所具有的方法,而不具有用于调用的其他方法否-它可以也可能会有其他方法。否则,实现接口的所有类都是相同的。

    你只会做:

    Shape s = new Square();
    
    如果要在s上执行可应用于任何形状的操作(例如绘制)

    如果需要执行
    Square
    特定操作,则需要使用
    Square
    变量。没有什么可以说你必须使用一个超级类

    我建议你继续你的设计,找到一些真实的单词例子,然后它会变得更清晰

    更新:

    请注意,
    new
    操作可能会在工厂内使用。类似地,设置属性(如边数)将(或可能)发生在工厂方法内部。工厂总是需要知道他们正在处理的确切类型

    在工厂之外,事情可以更一般

    因此,有一条规则可能有助于您的设计(但不是硬性的和快速的),那就是在工厂中使用特定的类,而在工厂之外使用
    Shape
    类。

    您的设计是正确的(到目前为止)。具体回答您的问题:

    那么,我的设计是否不正确否-就目前而言,它是正确的。

    实现接口的类是否应该只具有接口所具有的方法,而不具有用于调用的其他方法否-它可以也可能会有其他方法。否则,实现接口的所有类都是相同的。

    你只会做:

    Shape s = new Square();
    
    如果要在s上执行可应用于任何形状的操作(例如绘制)

    如果需要执行
    Square
    特定操作,则需要使用
    Square
    变量。没有什么可以说你必须使用一个超级类

    我建议你继续你的设计,找到一些真实的单词例子,然后它会变得更清晰

    更新:

    请注意,
    new
    操作可能会在工厂内使用。类似地,设置属性(如边数)将(或可能)发生在工厂方法内部。工厂总是需要知道他们正在处理的确切类型

    在工厂之外,事情可以更一般

    因此,有一条规则可能有助于您的设计(但不是硬性的和快速的),那就是在工厂中使用特定的类,而在工厂之外使用
    Shape
    类。

    您的设计是正确的(到目前为止)。具体回答您的问题:

    那么,我的设计是否不正确否-就目前而言,它是正确的。

    实现接口的类是否应该只具有接口所具有的方法,而不具有用于调用的其他方法否-它可以也可能会有其他方法。否则,实现接口的所有类都是相同的。

    你只会做:

    Shape s = new Square();
    
    如果要在s上执行可应用于任何形状的操作(例如绘制)

    如果需要执行
    Square
    特定操作,则需要使用
    Square
    变量。没什么好说的