正确使用';扩展';java中的类

正确使用';扩展';java中的类,java,Java,假设我有一个带有泛型函数的数学类,例如 public class math { public double add(int a, int b){ //code } } 我有一个班级“学生””想要使用上面的“添加””方法。我是否延长学生的数学课?或者创建它的一个实例?e、 g math a = new math(); a.add 将add函数设置为静态会更有意义,然后你可以在学生课堂上做数学。例如,在学生课堂上添加(1,1)。将add函数设置为静态会更有意义,然后你可以

假设我有一个带有泛型函数的数学类,例如

public class math {

  public double add(int a, int b){
    //code
  }

}
我有一个班级“
学生”
”想要使用上面的“
添加”
”方法。我是否延长学生的数学课?或者创建它的一个实例?e、 g

math a = new math(); 
a.add 

将add函数设置为静态会更有意义,然后你可以在学生课堂上做数学。例如,在学生课堂上添加(1,1)。

将add函数设置为静态会更有意义,然后你可以在学生课堂上做数学。例如,添加(1,1)。

使用“helper方法”最好的方法这可能是以一种静态的方式使用它们,只要它是这样一个简单的任务。你的类名也应该以大写字母开头

像这样:

public class Math
{

    public static double add(int a, int b)
    {
    //code
    }

}
然后像这样访问它:

Math.add(1,2);
public interface Addable<S, T, U> {
    S add(T a, U b);
}
注意: 这只是OP应该使用的建议,对于正确使用“extend”的答案,请参见。

像这样的“helper方法”最好是以静态的方式使用它们,只要它是这样一个简单的任务。你的类名也应该以大写字母开头

像这样:

public class Math
{

    public static double add(int a, int b)
    {
    //code
    }

}
然后像这样访问它:

Math.add(1,2);
public interface Addable<S, T, U> {
    S add(T a, U b);
}
注意:
这只是OP应该使用的建议,对于正确使用“extend”的答案,请参见。

在OO设计中,使用继承进行代码重用是一种反模式的错误做法。仅当存在
关系时才使用继承。那么你能说学生是数学吗?如果否,则没有理由使用继承。如果重用的方法非常常见,那么应该将其放在实用程序类中


有关更多信息,请参见和…

在OO设计中,使用继承进行代码重用是一种反模式的错误做法。仅当存在
关系时才使用继承。那么你能说学生是数学吗?如果否,则没有理由使用继承。如果重用的方法非常常见,那么应该将其放在实用程序类中


更多信息,请参见和…

学生
扩展
数学
没有什么意义,因为学生不是数学对象。学生是一个人,所以你可以有一个
person
类,然后让
student扩展person

如果您想让两个方法有一个类似的
add
方法,那么您可以创建一个接口
Addable
,该接口声明存在这样一个
add
方法。它可能看起来像这样:

Math.add(1,2);
public interface Addable<S, T, U> {
    S add(T a, U b);
}
公共接口可添加{
S加上(T a,U b);
}

公共类学生实现可添加{
私人互联网;
学生(国际年龄){
这个。年龄=年龄;
}
公共学生添加(学生a,整数b){
返回新学生(a.年龄+b);
}
公共整数getAge(){
回归年龄;
}
}

公共类数学实现可添加{
公共双加(整数a、整数b){
返回Double.valueOf(a+b);
}
}

然而这只是为了解释继承是如何工作的;正如其他一些答案已经指出的那样,像这样制作一个
add
方法没有什么意义。将这样的东西(独立于对象的实际实例的函数)改为
静态方法。

Student
扩展
Math
没有什么意义,因为学生不是数学对象。学生是一个人,所以你可以有一个
person
类,然后让
student扩展person

如果您想让两个方法有一个类似的
add
方法,那么您可以创建一个接口
Addable
,该接口声明存在这样一个
add
方法。它可能看起来像这样:

Math.add(1,2);
public interface Addable<S, T, U> {
    S add(T a, U b);
}
公共接口可添加{
S加上(T a,U b);
}

公共类学生实现可添加{
私人互联网;
学生(国际年龄){
这个。年龄=年龄;
}
公共学生添加(学生a,整数b){
返回新学生(a.年龄+b);
}
公共整数getAge(){
回归年龄;
}
}

公共类数学实现可添加{
公共双加(整数a、整数b){
返回Double.valueOf(a+b);
}
}

然而这只是为了解释继承是如何工作的;正如其他一些答案已经指出的那样,像这样制作一个
add
方法没有什么意义。将这样的函数(独立于对象的实际实例的函数)改为
静态方法。

您的示例中没有通用方法。你是说公开的?不,这不是我们在Java中使用
extends
的方式。阅读更多。扩展它在逻辑上意味着“每个学生都是数学”。这就是你想要的吗?在我看来,这些方法应该是静态的。我不认为为调用add创建新的数学对象有什么意义。这是一个太基本的问题。阅读一本介绍Java的书,你应该知道“泛型”在许多编程语言中都有特定的技术含义,包括Java。这并不意味着你认为它在这里意味着什么;)您的示例中没有通用方法。你是说公开的?不,这不是我们在Java中使用
extends
的方式。阅读更多。扩展它在逻辑上意味着“每个学生都是数学”。这就是你想要的吗?在我看来,这些方法应该是静态的。我不认为为调用add创建新的数学对象有什么意义。这是一个太基本的问题。阅读一本介绍Java的书,你应该知道“泛型”在许多编程语言中都有特定的技术含义,包括Java。这并不意味着你认为它在这里意味着什么;)这很好,但不能回答这个问题(不应该回答)。我们应该帮助别人不要因为他们缺乏知识而批评他们。我同意静态工程,并会