构造方法能否override 和overLoding?

Pol 2009-02-12 02:00:45
如题

我在一java面试题中看到: 构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading

以下是我的测试:
Overloading

class A {
public A() {}
}
public B extends A {
public void A(String str) {}
}

这样编译没有错,还服合OverLoading的语法,所以我认为构造方法可以OverLoading;

Override
Overloading

class 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,还是其它什么?


如题,谁能给一个确切的解释?




...全文
274 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
HinanaiTenshi 2009-02-12
  • 打赏
  • 举报
回复
恩,那是个小bug,
eclipse中基类有普通方法和超类某个构造方法同名且参数一样,就会出那个提示.
ZiSheng 2009-02-12
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 swallow_pulm 的回复:]
引用 23 楼 jiangnaisong 的回复:
引用 22 楼 valrent 的回复:
构造方法是不能被继承的,怎么在子类中重载?

答: 是的.不能被继承的,就不能在子类中重载.但人家说的是在同一个类中:构造方法是可以重载的.


说的非常明白,如果原回答也这样就好了。
这样的话,我的帖子中的另一个问题就是Eclipse中的Bug了。

构造器Constructor不能被继承,因此不能重写Overriding,但可以在本类中重载Overloading 。
[/Quote]
是的,那个出现的提示是个bug
铑枪--突廆孒 2009-02-12
  • 打赏
  • 举报
回复
一、[Quote=引用 16 楼 swallow_pulm 的回复:]
回复十一楼:
我是说在子类中重载父类中的构造方法行不?

重载:
方法名同,参数列表不同(顺序不同,类型不同,个数不同),返回类型没要求。(可以在本类和父与子类中实现)
覆盖(重写/属性叫遮盖)
名同,参数同,返回类型同,控制访问不能更严,抛弃的异常不能更多。(出现在子类中)

不知道,这样说对不对??
[/Quote]


二、何为构造方法:即方法名与类名相同,没有返回类型,不能被static ,final,synchronized,abstract,native修饰的方法。
明白这两点后,相信你就会明白构造方法是不能被重写的。只能被重载。。。
Pol 2009-02-12
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 jiangnaisong 的回复:]
引用 22 楼 valrent 的回复:
构造方法是不能被继承的,怎么在子类中重载?

答: 是的.不能被继承的,就不能在子类中重载.但人家说的是在同一个类中:构造方法是可以重载的.
[/Quote]

说的非常明白,如果原回答也这样就好了。
这样的话,我的帖子中的另一个问题就是Eclipse中的Bug了。

构造器Constructor不能被继承,因此不能重写Overriding,但可以在本类中重载Overloading 。
kenesyu 2009-02-12
  • 打赏
  • 举报
回复
cxvxcvxz
云上飞翔 2009-02-12
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 valrent 的回复:]
构造方法是不能被继承的,怎么在子类中重载?
[/Quote]
答: 是的.不能被继承的,就不能在子类中重载.但人家说的是在同一个类中:构造方法是可以重载的.
valrent 2009-02-12
  • 打赏
  • 举报
回复
构造方法是不能被继承的,怎么在子类中重载?
云上飞翔 2009-02-12
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 swallow_pulm 的回复:]
回复十一楼:
我是说在子类中重载父类中的构造方法行不?

重载:
方法名同,参数列表不同(顺序不同,类型不同,个数不同),返回类型没要求。(可以在本类和父与子类中实现)
覆盖(重写/属性叫遮盖)
名同,参数同,返回类型同,控制访问不能更严,抛弃的异常不能更多。(出现在子类中)

不知道,这样说对不对??
[/Quote]
答:说得真好.说得都对.
Pol 2009-02-12
  • 打赏
  • 举报
回复

在继承中的子类可以重载父类的方法。
valrent 2009-02-12
  • 打赏
  • 举报
回复
我觉得,“在子类中重载父类中的构造方法”看不懂?在子类中只能叫重写或者写的是另一个普通方法,两个类中那不叫重载。同一个类里面才叫重载,对不对?
valrent 2009-02-12
  • 打赏
  • 举报
回复
我觉得,“在子类中重载父类中的构造方法”看不懂?在子类中只能叫重写或者写的是另一个普通方法,两个类中那不叫重载。同一个类里面才叫重载,对不对?
wclszh 2009-02-12
  • 打赏
  • 举报
回复
不能被继承,只能重载,不存在重写
Pol 2009-02-12
  • 打赏
  • 举报
回复
回复十一楼:
我是说在子类中重载父类中的构造方法行不?

重载:
方法名同,参数列表不同(顺序不同,类型不同,个数不同),返回类型没要求。(可以在本类和父与子类中实现)
覆盖(重写/属性叫遮盖)
名同,参数同,返回类型同,控制访问不能更严,抛弃的异常不能更多。(出现在子类中)

不知道,这样说对不对??
valrent 2009-02-12
  • 打赏
  • 举报
回复
重载(overload)是同一个类中名字相同但参数不同的多个方法;覆盖(override)是在有继承关系的父、子两个类中名字,参数都相同的方法。不知我理解得对不对。
zuoyangguang 2009-02-12
  • 打赏
  • 举报
回复
class A {
public A() {}
public A(String str){}//重载
}
public B extends A {
public B(){}
public B(String str) {/*super(str);*/}
}
transit136 2009-02-12
  • 打赏
  • 举报
回复
先弄明白什么是重载什么是重写吧
ZiSheng 2009-02-12
  • 打赏
  • 举报
回复
重载,重写,覆盖,这几个概念不能混淆了,重写又叫覆盖。
ZiSheng 2009-02-12
  • 打赏
  • 举报
回复

class A{
public A(int a,int b){
}
public A(String c,String d){

}
}

这叫构造函数的重载
Pol 2009-02-12
  • 打赏
  • 举报
回复
回复八楼:
在B类中写出public A() {} 肯定是不对的,也就是说不能覆盖。
但你说可以重载,我这样:public void A() {} 写不对,那应该怎么写?
public A(参数列表){},这样有错。
mike_24 2009-02-12
  • 打赏
  • 举报
回复
首先构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading 这句话没错。

第二
class A {
public A() {}
}
public class B extends A {
public void A(String str) {}
}

public void A(String str)这个不是构造函数,构造函数是不能有返回值的,连void也不能有。这个也不是Overloading
,因为Overloading的条件是参数不同,方法名和修饰符相同。
加载更多回复(8)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧