Device.java
public interface Device {

public abstract void start();
}DeviceImpl.java
public class DeviceImpl implements Device { public void start() {   // 这个方法不是abstract,怎么也可以正常运行? Java的语法检查出问题了吗?
System.out.println("Device started!");
} public static void main(String[] args) {
DeviceImpl t = new DeviceImpl();
t.start();
}}

解决方案 »

  1.   

    没问题啊,既然DeviceImpl实现了Device接口,当然且必须要实现Device接口的所有功能
      

  2.   

    Device是接口     DeviceImpl实现了Device这个接口,实现接口必须实现它里面的方法,因为接口里面默认都是抽象方法,好好看看书吧
      

  3.   

    在接口中的方法加不加abstract都是一样的,接口本身加不加abstract也是一样的
      

  4.   

    abstract是用来定义抽象方法的,表示实现他的类要重写这个方法,你用DeviceImpl implements Device,当然要重写public abstract void start();这个方法,但是重写了具体方法是不可以加上abstract声明的,除非这个类本来也是抽象类,而且只是继承了这个抽象方法。
      

  5.   

    恩,只有在定义的时候需要abstract,实现的时候不再需要该修饰符
      

  6.   

    没问题啊,Device是接口,abstract void start()是接口中的抽象方法,不用写abstract也在接口中默认为抽象方法。
    DeviceImpl是实现了device接口的类,那么所实现接口中的方法必须都得实现成为具体方法,而具体类中的方法不能用abstract,abstract只能在抽象类里用。
      

  7.   

    不用写abstract也在接口中默认为抽象方法。 记下了
      

  8.   

    我认为是这样,首先在Impl实现类中你是实现前面的接口,而你在接口中定义的抽象方法,你在实现类中,满足特点:1:实现类必须实现继承的类的未实现的方法。(接口)
      

  9.   

    实现了接口的类,就要实现接口中定义的抽象方法,abstract就要去掉啦。
      

  10.   


    接口中的好像默认都是abstract,不用单独写出来
      

  11.   

    代码没什么问题啊,interface是特殊的抽象类
      

  12.   

    接口中的方法默认就是abstract的,这个是显然的。
    但是在接口方法定义时,在方法前面加abstract修饰符,却是不常见的。被误导了:
    理解成了,加abstract后,第一个实现该接口的类,必须是抽象类,只有第二层类才可以具体类。
    (一开始觉得这是一种很神奇的用法,没想到,是自己绕进去了-_-||)