如题 我在一java面试题中看到: 构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading 以下是我的测试:
Overloadingclass A {
public A() {}
}
public B extends A {
public void A(String str) {}
}
这样编译没有错,还服合OverLoading的语法,所以我认为构造方法可以OverLoading;Override
Overloadingclass A {
public A() {}
}
public B extends A {
public void A() {}
}
显然:public A() 和 public void A() 不是Override。
但是如果你用Eclipse编写的话,你会发现确 public void A() {}
前面有一个tips,提示“Overrieds A.A”,这和普通方法的Override一样,
这难道是Eclipse的Bug,还是其它什么?
如题,谁能给一个确切的解释?
Overloadingclass A {
public A() {}
}
public B extends A {
public void A(String str) {}
}
这样编译没有错,还服合OverLoading的语法,所以我认为构造方法可以OverLoading;Override
Overloadingclass A {
public A() {}
}
public B extends A {
public void A() {}
}
显然:public A() 和 public void A() 不是Override。
但是如果你用Eclipse编写的话,你会发现确 public void A() {}
前面有一个tips,提示“Overrieds A.A”,这和普通方法的Override一样,
这难道是Eclipse的Bug,还是其它什么?
如题,谁能给一个确切的解释?
构造方法是方法名与类名同相,没有static关键字,没有返回值的方法。
加上就可以。
在B中的 public void A() {}只是定义了一个方法A而已。这样写不符合构造方法的语法。你不妨试试 public A() {} 能编译通过不。构造方法可以被重载,大家都知道,不说了。
class A {
public A() {}
}
public class B extends A {
public void A(String str) {}
}
public void A(String str)这个不是构造函数,构造函数是不能有返回值的,连void也不能有。这个也不是Overloading
,因为Overloading的条件是参数不同,方法名和修饰符相同。
在B类中写出public A() {} 肯定是不对的,也就是说不能覆盖。
但你说可以重载,我这样:public void A() {} 写不对,那应该怎么写?
public A(参数列表){},这样有错。
class A{
public A(int a,int b){
}
public A(String c,String d){}
}这叫构造函数的重载
public A() {}
public A(String str){}//重载
}
public B extends A {
public B(){}
public B(String str) {/*super(str);*/}
}
说的非常明白,如果原回答也这样就好了。
这样的话,我的帖子中的另一个问题就是Eclipse中的Bug了。构造器Constructor不能被继承,因此不能重写Overriding,但可以在本类中重载Overloading 。
明白这两点后,相信你就会明白构造方法是不能被重写的。只能被重载
eclipse中基类有普通方法和超类某个构造方法同名且参数一样,就会出那个提示.