java初学者实践教程15-方法的重载与重写
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() {
返回位置;//返回子类的类型,而不是原始类型。
}
}
0条评论