Inheritance 继承:理解
例如,假设一个程序处理由实部和虚部组成的复数。在复数中,实部和虚部的行为类似于实数,因此所有运算(+、-、/、*、sqrt、sin、cos等)都可以从称为实数的对象类中继承,而不必用代码编写 子类复合体不需要编写任何代码的断言似乎可信吗 就每个类必须维护的数据成员而言,这有意义吗?为什么Inheritance 继承:理解,inheritance,Inheritance,例如,假设一个程序处理由实部和虚部组成的复数。在复数中,实部和虚部的行为类似于实数,因此所有运算(+、-、/、*、sqrt、sin、cos等)都可以从称为实数的对象类中继承,而不必用代码编写 子类复合体不需要编写任何代码的断言似乎可信吗 就每个类必须维护的数据成员而言,这有意义吗?为什么 这在方法上有意义吗?有没有更好的方法来使用现有的类Real创建类复合体?Complex实际上并没有扩展Real。实数只是复数的一种特殊情况(其中虚部为0)。如果复数扩展了实数,并且依赖于实数的算术运算,那么它们
这在方法上有意义吗?有没有更好的方法来使用现有的类Real创建类复合体?Complex实际上并没有扩展Real。实数只是复数的一种特殊情况(其中虚部为0)。如果复数扩展了实数,并且依赖于实数的算术运算,那么它们将是不正确的。例如,添加操作将添加真实零件并返回真实零件 学习OOP时的一个常见错误是到处都能看到继承关系,而实际上它们远不常见。问题的一部分在于,书籍和糟糕的课程给了你一个可怕的例子,从而使这一点永久化(90年代的例子更多,但现在仍然如此)。作文要普遍得多 给您一个可能更合适的Java示例(因为您没有提到语言,实际代码通常比伪代码描述更有用):
public class Complex {
private final double real;
private final double imaginary;
private Complex(double real) {
this(real, 0.0d);
}
private Complex(double real, double imaginary) {
this.real = real;
this.imaginary = imaginary;
}
public static Complex makeReal(double real) {
return new Complex(real);
}
public static Complex makeComplex(double real, double imaginary) {
return new Complex(real, imaginary);
}
public Complex add(Complex other) {
return makeComplex(real + other.real, imaginary + other.imaginary);
}
...
}
注意:这演示了两个更有用的学习概念:
复杂并不是真的扩展到真实。实数只是复数的一种特殊情况(其中虚部为0)。如果复数扩展了实数,并且依赖于实数的算术运算,那么它们将是不正确的。例如,添加操作将添加真实零件并返回真实零件 学习OOP时的一个常见错误是到处都能看到继承关系,而实际上它们远不常见。问题的一部分在于,书籍和糟糕的课程给了你一个可怕的例子,从而使这一点永久化(90年代的例子更多,但现在仍然如此)。作文要普遍得多 给您一个可能更合适的Java示例(因为您没有提到语言,实际代码通常比伪代码描述更有用):
public class Complex {
private final double real;
private final double imaginary;
private Complex(double real) {
this(real, 0.0d);
}
private Complex(double real, double imaginary) {
this.real = real;
this.imaginary = imaginary;
}
public static Complex makeReal(double real) {
return new Complex(real);
}
public static Complex makeComplex(double real, double imaginary) {
return new Complex(real, imaginary);
}
public Complex add(Complex other) {
return makeComplex(real + other.real, imaginary + other.imaginary);
}
...
}
注意:这演示了两个更有用的学习概念:
我真的不完全理解你的问题。Complex是通过使用一种rational方法实现的数据类型。复数由两个实部构成,第一个是原样,第二个假设为虚部的前置因子。您可以在内部用字符串、位数组或整数实现复数,每个数字一个,但那将是非常愚蠢的
复杂类确实需要代码。一个复合体不是真实的,它是一个复合体,它的行为方式与真实的不同。你甚至不能创建一个复杂的real子类,它们是两个不同的东西。我真的不能完全理解你的问题。Complex是通过使用一种rational方法实现的数据类型。复数由两个实部构成,第一个是原样,第二个假设为虚部的前置因子。您可以在内部用字符串、位数组或整数实现复数,每个数字一个,但那将是非常愚蠢的
复杂类确实需要代码。一个复合体不是真实的,它是一个复合体,它的行为方式与真实的不同。你甚至不能创建一个复数作为实数的子类,它们是两个不同的东西。复数是两个实数的组合,x+i*y,其中i是sqrt(-1) 您的复杂类需要处理关于如何将两个复数加/减/乘/除等所需的额外逻辑 例如,(a+ib)*(c+id)=(ac− bd+i(bc+ad) 这是将放入复杂类中的代码 但是,它会以另一种方式工作——如果您已经有一个复杂的类,而没有实际的类(无论这种情况多么不可能),那么您可以将实际的类定义为复杂的子类,并将虚拟的组件锁定为0
从Real继承如此复杂的内容是行不通的。更好的方法不是继承,而是组合——复数由两个实数组成。复数是两个实数的组合,x+i*y,其中i是sqrt(-1) 您的复杂类需要处理关于如何将两个复数加/减/乘/除等所需的额外逻辑 例如,(a+ib)*(c+id)=(ac− bd+i(bc+ad) 这是将放入复杂类中的代码 但是,它会以另一种方式工作——如果您已经有一个复杂的类,而没有实际的类(无论这种情况多么不可能),那么您可以将实际的类定义为复杂的子类,并将虚拟的组件锁定为0
从Real继承如此复杂的内容是行不通的。更好的方法不是继承,而是组合——一个复数由两个实数组成。我完全不理解你的问题。在里面