用Java声明抽象接口可能会给该接口增加一些额外的含义?

用Java声明抽象接口可能会给该接口增加一些额外的含义?,java,Java,可能重复: 下面的代码段定义了一个抽象接口并计算通过控制台输入的两个数字的总和 package abstractinterface; import java.util.Scanner; abstract interface SumInterface { abstract public void sum(); } final class Summation implements SumInterface { private int x,y; public Summ

可能重复:

下面的代码段定义了一个抽象接口并计算通过控制台输入的两个数字的总和

package abstractinterface;

import java.util.Scanner;

abstract interface SumInterface
{
    abstract public void sum();
}

final class Summation implements SumInterface
{
    private int x,y;

    public Summation(int x, int y)
    {
        this.x=x;
        this.y=y;
    }

    public void sum()
    {
        System.out.print("\nSummation = "+(x+y)+"\n\n");
    }
}

final public class Main
{
    public static void main(String[] args)
    {
        try
        {
            Scanner s=new Scanner(System.in);

            System.out.print("\nEnter a number:->");
            int x=s.nextInt();

            System.out.print("\nEnter another number:->");
            int y=s.nextInt();

            new Summation(x, y).sum();
        }
        catch(NumberFormatException ex)
        {
            System.err.println(ex.getMessage());
        }
    }
}


该接口包含一个抽象方法,由类Summation实现。这里唯一的问题是,如果从上面的界面中删除关键字abstract,它是否有不同的意义?这种抽象接口在Java中的实际用途是什么?

使用接口时,不需要使用关键字
abstract
。Java接口中的所有方法都是抽象的。如果这是一次代码审查,我会超越“不必要”,要求您从接口声明中删除
摘要


抽象关键字适用于类;它用于区分抽象方法和具有默认实现的方法。

使用接口时,不需要使用关键字
abstract
。Java接口中的所有方法都是抽象的。如果这是一次代码审查,我会超越“不必要”,要求您从接口声明中删除
摘要


抽象关键字适用于类;它用于区分抽象方法和具有默认实现的方法。

abstract
对于接口是可选的。如果你相信它能把事情说清楚,我会用它

对于接口的方法,
public
abstract
是可选的

对于接口的常量,
public
static
final
是可选的


对于接口中的类和接口,
公共
静态
是可选的。

抽象
对于接口是可选的。如果你相信它能把事情说清楚,我会用它

对于接口的方法,
public
abstract
是可选的

对于接口的常量,
public
static
final
是可选的


对于接口中的类和接口,
公共
静态
是可选的。

其用法标记为“过时,不应在中使用”

在我看来,这也是一种误导,因为它的冗余性——它意味着与未标记为抽象的接口不同的东西,但所有接口都隐式地
抽象


进一步讨论。

其用法在中标记为“过时且不应使用”

在我看来,这也是一种误导,因为它的冗余性——它意味着与未标记为抽象的接口不同的东西,但所有接口都隐式地
抽象


进一步讨论。

没有区别。Java编译器自动生成代码(就像您的类没有任何构造函数一样,但默认情况下它有
(){}
构造函数)

Java接口语法:

[abstract] interface <Interface Name> {
[public abstract] <type> <Method Name>(<formal arguments>);
}
[abstract]接口{
[公开摘要]();
}

[]
意味着写内容与不写内容无关。

没有区别。Java编译器自动生成代码(就像您的类没有任何构造函数一样,但默认情况下它有
(){}
构造函数)

Java接口语法:

[abstract] interface <Interface Name> {
[public abstract] <type> <Method Name>(<formal arguments>);
}
[abstract]接口{
[公开摘要]();
}

[]
意味着写或不写内容无关紧要。

好吧,你也可以将一个类定义为抽象类,而不需要任何抽象方法。。。拥有抽象方法会自动强制类是抽象的,但不需要相反。(另一方面,如果您认为
接口
是一个只有抽象(公共)方法且没有非staticonst成员的类,那么很明显,
抽象
类修饰符在接口上是多余的。)是的,完全正确。你可以有一个没有抽象方法的抽象类,但这会让我质疑是否需要“抽象类”。听起来很具体。在这种情况下,它们都有合理的违约行为。保留关键字的一个原因是为了明确您的意图,即永远不会单独实例化类。这只是语义和实现的分离。语义声明了类的含义,并且可以(也应该)声明抽象性的意图,这与类的具体实现是否可以单独使用无关。这在实践中是否有用是另一回事,但从纯语言设计的角度来看,分离这些概念是有意义的。好的,你也可以命令一个类是抽象的,而不需要任何抽象方法。。。拥有抽象方法会自动强制类是抽象的,但不需要相反。(另一方面,如果您认为
接口
是一个只有抽象(公共)方法且没有非staticonst成员的类,那么很明显,
抽象
类修饰符在接口上是多余的。)是的,完全正确。你可以有一个没有抽象方法的抽象类,但这会让我质疑是否需要“抽象类”。听起来很具体。在这种情况下,它们都有合理的违约行为。保留关键字的一个原因是为了明确您的意图,即永远不会单独实例化类。这只是语义和实现的分离。语义声明了类的含义,并且可以(也应该)声明抽象性的意图,这与类的具体实现是否可以单独使用无关。这在实践中是否有用是另一回事,但从纯语言设计角度来看