-6

我想创建一个接口,作为 System.out.print() 的捷径;但是当我编译时我得到abstract methods do not specify a body并且我不知道这意味着什么

public interface Printing{   
    public  abstract void prt(String print,boolean line){ 
        if(line=true) {   
            System.out.println(print);
        }       
    }   

    public abstract void prt(String print){          
        System.out.print(print);       
    } 
}
4

7 回答 7

3

在 an 中声明的方法interface是自动publicabstract。所以你可以从放弃这两个修饰符开始。

根据定义,抽象方法没有主体......所以也许接口不是您在这里寻找的。

如果您不想实例化您的Printing但想要“默认实现”,请使用为这两种方法提供基本实现的abstract 类:

public abstract class Printing
{
    public void ptr(String print, boolean line) {
        // do stuff
    }

    public void ptr(String print) {
        // do stuff
    }
}

extends Printing如果需要,实现将不得不@Override使用默认方法。

于 2013-06-13T15:39:29.127 回答
1

接口是一个契约,你只需指定应该实现的方法。抽象方法不包含任何主体,仅包含签名。

于 2013-06-13T15:38:01.233 回答
0

接口就像空壳,成员没有实现。

这是您将代码更改为所需的内容:

void prt(String print,boolean line);

void prt(String print);

http://docs.oracle.com/javase/tutorial/java/concepts/interface.html http://csis.pace.edu/~bergin/papers/Interface.html

于 2013-06-13T15:44:59.693 回答
0

抽象方法从不指定主体。这就是为什么它们被抽象化的原因。如果您在接口中创建方法,它们将始终是公共的和抽象的。

也许在这种情况下,您想编写一个抽象类并编写一个带有实现的方法,另一个作为抽象方法。

于 2013-06-13T15:39:41.597 回答
0

使其成为抽象类而不是接口。

接口可能没有任何方法的实现。所以你唯一能拥有的是。

void prt(String print,boolean line);
void prt(String print);
于 2013-06-13T15:37:58.337 回答
0

不能指定主体来抽象方法。抽象方法意味着它们是不完整的。

我想你需要更多地了解接口和抽象类。

要了解接口抽象类在 Java 或任何其他面向对象编程语言中的含义,您应该首先了解继承。

遗产

考虑一辆汽车和一辆公共汽车。它们是两种不同的车辆。但是它们仍然具有一些共同的特性,例如它们具有转向、制动器、齿轮、发动机等。

因此,使用继承概念,这可以表示为以下内容。

public class Vehicle {

    public Driver driver;
    public Seat[] seatArray; //In java and most of the Object Oriented Programming(OOP) languages, square brackets are used to denote arrays(Collections).
    //You can define as many properties as you want here..
}

现在是自行车..

public class Bicycle extends Vehicle {

    //You define properties which are unique to bicycles here..
    public Pedal pedal;

}

还有车..

public class Car extends Vehicle {

    public Engine engine;
    public Door[] doors;
}

这就是继承。如上所示,我们使用它们将对象分类为更简单的基本形式及其子形式。

抽象类

抽象类是不完整的对象。为了进一步理解它,让我们再次考虑车辆类比。
可以驾驶车辆。正确的?但是不同的车辆以不同的方式驾驶。例如,您不能像驾驶自行车一样驾驶汽车。
那么如何表示车辆的驱动功能呢?更难检查它是什么类型的车辆并用它自己的功能来驱动它;添加新类型的车辆时,您将不得不一次又一次地更改 Driver 类。
这就是抽象类和方法的作用。您可以将驱动方法定义为抽象的,以告知每个继承子必须实现此功能。
所以如果你修改车辆类..

//......Code of Vehicle Class
abstract public void Drive();
//.....Code continues

自行车和汽车还必须指定如何驾驶它。否则代码将无法编译并引发错误。

简而言之..抽象类是具有一些不完整功能的部分不完整类,继承的孩子必须自己指定。

接口

接口是完全不完整的。它们没有任何属性。他们只是表明继承的孩子有能力做某事..

假设你有不同类型的手机。他们每个人都有不同的方式来完成不同的功能;例如:打电话给一个人。手机制造商指定如何操作。在这里,手机可以拨打一个号码——也就是说,它是可拨号的。让我们将其表示为一个接口。

public interface Dialable {
    public void Dial(Number n);
}

此处 Dialable 的制造商定义了如何拨打号码。您只需要给它一个号码即可拨打。

Dialable myPhone1 = new Dialable() {
    public void Dial(Number n) {
        //Do the phone1's own way to dial a number
    }
}

Dialable myPhone2 = new Dialable() {
    public void Dial(Number n) {
        //Do the phone2's own way to dial a number
    }
}

在这里,通过使用接口而不是抽象类,您不必担心它的属性。例如:是否有触摸屏或拨号盘,是固定座机电话还是手机。你只需要知道它是否可以拨号。它是否继承(或实现) Dialable 接口。

开发人员通常使用接口来确保对象之间的互操作性,只要它们共享一个共同的功能(就像您可以更改为固定电话或手机一样,只要您只需拨打一个号码即可)。简而言之,接口是抽象类的更简单版本,没有任何属性。

另请注意,您可以实现(继承)任意数量的接口,但您只能扩展(继承)单个父类。

更多信息

抽象类与接口
Stackoverflow 中的另一个类似问题

于 2013-06-13T17:29:39.523 回答
0

如果只是想为 System.out.println() 方法添加快捷方式,
则无需添加 abstract 关键字。还将接口更改为类。

public class Printing{   
    public void prt(String print,boolean line){ 
        if(line=true) {   
            System.out.println(print);
        } else {
            System.out.print(print);
        }       
    }   

    public void prt(String print){          
        System.out.print(print);       
    } 
}

但是在这里你首先需要创建一个 Printing 对象的实例。就像:

Printing p = new Printing();
//Now you may call the functions on p.
p.prt("Without Line Terminator");
p.prt("Also Without Line Terminator",false);
p.prt("With Line Terminator",true);

如果您需要调用函数而不实例化它,就像Printing.prt("sample")代替Printing p = new Printing(); p.prt("sample")

您需要将 prt() 方法定义为静态的。

public class Printing{   
    public static void prt(String print,boolean line){ 
        if(line=true) {   
            System.out.println(print);
        } else {
            System.out.print(print);
        }       
    }   

    public static void prt(String print){          
        System.out.print(print);       
    }     
}

现在打电话..

//You may call the functions on Printing itself.
Printing.prt("Without Line Terminator");
Printing.prt("Also Without Line Terminator",false);
Printing.prt("With Line Terminator",true);

更多信息
静态方法
Oracle Javadoc 关于静态类

于 2013-06-13T17:45:06.410 回答