前言:偶然在CSDN看到这个关于接口的问题,于是就自己对接口的理解对相关问题发表了一些看法并做了相关的验证。
问题原文出自:http://community.csdn.net/Expert/topic/5200/5200325.xml?temp=.3303491
fp_zacard(自由指针) 的解答如下:
fp_zacard(自由指针) ( ) 信誉:100 Blog 2006-12-1 18:07:46 得分: 0
纠正一下:接口不能有静态方法,它的方法是abstract 并且是public的。
接口的实现也不一定要重写所有方法,可以重写一部分,但是实现接口的类要定义为abstract
-------------
下面是我的解答:
接口的成员方法隐含是public和abstract的,而且它的修饰符只能使用public和abstract而不能是其它;接口的成员变量隐含是public、static、finally的。
使用类实现接口时,如果不重写接口的所有方法,则只能将该类定义为抽象类,即abstract;否则必须实现接口的所有方法。
-------------
这是我改写楼上朋友的代码,已通过编译:
interface Vehicle...{
void speed();
void start();
}
abstract class Car implements Vehicle...{
public abstract void speed();
public void start()...{
System.out.println("start!");
}
}
class RunningCar extends Car...{
public void speed()...{
System.out.println("Speed up!");
}
}
public class Test...{
public static void main(String[] args)...{
RunningCar t=new RunningCar();
t.start();
t.speed();
}
}
程序输出:
start!
Speed up!
void speed();
void start();
}
abstract class Car implements Vehicle...{
public abstract void speed();
public void start()...{
System.out.println("start!");
}
}
class RunningCar extends Car...{
public void speed()...{
System.out.println("Speed up!");
}
}
public class Test...{
public static void main(String[] args)...{
RunningCar t=new RunningCar();
t.start();
t.speed();
}
}
程序输出:
start!
Speed up!
----------------
后记:在帮助别人解答问题时,同时自己也会对问题进行思考,而这思考往往会给自己带来不同的收获,所以对自己学习的提高也是会有很大帮助的。