interface i{
void a();
}
public class Ii implements i{
public void a(){
System.out.println("i");
}
public static void main(String[] args){
new Ii().a();
}
}
唉,多看看书吧
void a();
}
public class Ii implements i{
public void a(){
System.out.println("i");
}
public static void main(String[] args){
new Ii().a();
}
}
唉,多看看书吧
我是想在class Ii中实现interface i,并使i中的a()成为Ii中的class variable!明白了吧!回答问题前,看清楚点!:>
但你的主类有两个错,
第一个,主类必须具有public访问控制性
第二个,在主类你没有正确实现接口的方法void a();
所以,按照你的想法正确的写法如下:
interface i{
void a();
}
public class Ii implements i{
public void a(){
System.out.println("i");
}
static void b(){ new Ii().a(); } public static void main(String[] args){ b();
}
}去试一下吧,呵呵!
Exception in thread "main" java.lang.NoClassDefFoundError: IiE:\jbuilder\jdk1.4\bin>不行呀!
void a();
}
class Ii implements i{
public void a(){
System.out.println("i");
}
public static void b(){
//this.a();
Ii x = new Ii();
x.a();
}
public static void main(String[] args){
b();
}
}
程序一:
interface i{
void a();
}
public class testStatic implements i{
public static void a(){//注意此处a()为static!
System.out.println("i");
}
public static void main(String[] args){
testStatic.a();
}
C:\testStatic.java:2: a() in testStatic cannot implement a() in i; a() and a() are static
public static void a(){
^
1 error
程序二:
class testMain{
public static void a(){
System.out.println("a");
}
public static void main(String[] args){
testMain.a();
}
}
这个却能编译通过!
我想不通为什么实现接口时,不能使函数成为static method!!
你的实现类必须在方法上写public void a();不可以static修饰,这个是Java中的语法
比如:tij中P249中写到,"当你实现(implement)某个interface时,必须将承袭自该interface的所有函数都定义为public,否则他们的缺省属性会是'friendly',而你也就因此在继承过程中降低了访问权限----这在java中是不允许的!"//却没有如此明显的规定不能将函数定义为static啊!
而且static方法是不能被继承的,它是和具体的类绑定在一起的,那么你既然在子类中
要去实现接口的方法,必然需要的是同名,同返回类型,而且必须是public的方法
所以不能将方法定义为static
implements可以说是JAVA的多重继承,但接口也有它的特殊性,它的属性都是pulic static final,它的方法都是pulbic abstract , 而且没有方法体。而extends 类却没有此特殊要求,它与C++里面的继承一样的概念。
很好理解吧,祝你早日解决你的难题!
第二、带static修饰符的是属于类的函数,而不是属于实例的,也就是说如果父类和子类都实现了a()方法,调用时只考虑当前实例的修饰类型而不考虑实例实际的类型。也就是说如果将子类赋值给父类,然后调用父类的a()方法,将不会调用子类的a方法,这一点和继承不同。这就是Static的特殊之处-----不可重载。
说明继承了接口的类必须为类书写接口方法,而不能让它成为static,书上是没有这样的规定,但我们想想之所以有接口,是因为接口为很多继承它的类提供了规范,所以你就这样去想吧,编程嘛,经验第一,理论第二!
祝你成功!
public void a() {
System.out.println("A.a()");
} public static void b() {
System.out.println("A.b()");
}
}class B extends A{
public void a() {
System.out.println("B.a()");
} public static void b() {
System.out.println("B.b()");
}
}A a = new A();
B b = new B();
A c = new B();
a.a();a.b();b.a();b.b();c.a();c.b();其中c.b() ==> A.b(); 可见,static的方法没有多态,且和对象的声明类型(而非实际类型)相关。类似A c = new B();c.b(); ==> A.b();假设 interface IA { static void a(); }
class CA implements IA {public static void a();}
IA a = new CA();
a.a();
的时候,将会去执行IA.a();那显然是错误的