java初学者实践教程15-方法的重载与重写

java初学者实践教程15-方法的重载与重写,第1张

java初学者实践教程15-方法的重载与重写,第2张

Java里有很多概念,这次有两个概念,重载和重写。这是两个新概念,对于初学者来说也是比较混乱的。他们的概念完全不同,只是都有“重”字,所以觉得很像。

解释下面这两个概念:


方法重载位于具有相同方法名但不同参数的类中。返回类型呢?可以相同,也可以不同。


method overriding Method子类不想原封不动地继承父类的方法,而是想做一些修改,这就需要Method overriding。方法重写也称为方法重写。如果还是搞不清楚,就把“重写重写”这个词读几遍。如果你知道它是一个覆盖,你就知道它是一个覆盖父类的子类。

练习:超载示例

类方法重载{
void receive(int I){
system . out . println("接收一个int数据");
system . out . println(" I = "+I);
}
void receive(float f){
system . out . println("接受浮点数据");
system . out . println(" f = "+f);
}
void receive(Strings){
system . out . println("接受一个字符串数据");
system . out . println(" s = "+s);
}

公共静态void main(String[] args){

method overloading m = new method overloading();

m . receive(3456);

m . receive(34.56);

M.recieve(“百家全软件项目实验室”);

}
}

正如您所看到的,在上面的例子中有三个receive()方法,名称相同,但参数不同。这样,当调用main()时,参数就方便使用了。改写的例子似乎不需要再举了。如果你记不住它们,就和“覆盖”有关。一起读。

有时候重载重写的方式有些复杂,在jdk5中。有一些方法可以简化它。我们来看看jdk5的可变参数。多次重载同一个参数类型的方法真的很烦。方法只有一个,pri (strinargs),pri (strinarg0,strinarg1),pri (strinarg0,strinarg1,strinarg2),pri (strinarg0,strinarg1,strinarg2,strinarg3)。这样会写很多繁琐的代码。现在jdk5可以用“…”代替这些参数。

练习:

公共类重载{

//同类型的几个参数,替换为“...”

公共void优先级(字符串...字符串){

for(string str:strings)//for的这个循环语句也意味着迭代。

system . out . print(str);

}

公共静态void main(String[] args){

新重载()。pri("100jq "、"百家全软件项目研究室"、" www . 100jq . com ");

}

}


jdk5的方法重写比以前增加了一个叫做协变返回的概念。在jdk以前的版本中,还有一个令人讨厌的地方。方法重写确实是一个很好的机制。如果要使用父类的方法,只需写一个super。如果您不想使用父类的方法,请重写重写。但是被覆盖的返回类型不能被覆盖,父类的类型不够。我们能在子类中覆盖它的类型吗?现在好了。

请看下面的例子:

类Point2D {//定义一个二维点。

受保护的int x,y;

公共点2D() {

this . x = 0;

this . y = 0;}

公共点2D(int x,int y) {

this.x = x

this.y = y

}}

//定义3D点并继承2D

类Point3D扩展了Point2D {

受保护的int z;

public Point3D(int x,int y) {

this(x,y,0);

}

公共点3D(int x,int y,int z) {

this.x = x

this.y = y

this.z = z

}}

//定义二维的位置

类别位置2D {

Point2D位置;

公共位置2D() {

this . location = new point 2d();

}

公共位置2D(int x,int y) {

this.location = new Point2D(x,y);

}

公共点2D getLocation() {

返回位置;

}}

//定义三维位置,继承二维位置

类位置3D扩展位置2D {

Point3D位置;//这里变成了Point3D的类型

公共位置3D(int x,int y,int z) {

this.location = new Point3D(x,y,z);

}

@Override //批注是一个重写方法。

public Point3D getLocation() {

返回位置;//返回子类的类型,而不是原始类型。

}

}

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » java初学者实践教程15-方法的重载与重写

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情