正确使用';扩展';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。这并不意味着你认为它在这里意味着什么;)这很好,但不能回答这个问题(不应该回答)。我们应该帮助别人不要因为他们缺乏知识而批评他们。我同意静态工程,并会