java中 一些比较有特征的方法
有时候,重载和重写的方式有些复杂,在jdk5里面。有一些方式能简化一些。
我们来看看吧,jdk5的可变参数。 如果把相同参数类型的方法重载好几遍真的是很烦。
就一个方法,pri(String args), pri(String arg0 ,String arg1), pri(String arg0,String arg1,String arg2), pri(String arg0,String arg1,String arg2,String arg3)。
这样的话会写很多烦琐的代码。现在jdk5可以,用“…”来代替这些参数。
实践:
public class overload { //若干个相同类型的参数,用“...”代替 public void pri(String... strings ){ for (String str : strings) //for这个循环语句也有迭代的意思 System.out.print(str); } public static void main(String[] args){ new overload().pri("100jq"," 百家拳软件项目研究室"," www.100jq.com"); } } |
jdk5的方法重写,比以前多了一个叫做协变返回的概念。在以往jdk的版本中,还有一个比较让人讨厌的地方。方法重写确实是比较不错的机制,如果想用父类的方法,写个super就可以了,如果不想用父类的方法就重写覆盖。但是重写覆盖的返回类型不能覆盖,父类的类型不够用怎么办,我们想在子类重写它的类型可以吗?现在可以了。
看下面的例子:
class Point2D { //定义二维的点 protected int x, y; public Point2D() { this.x=0; this.y=0;} public Point2D(int x, int y) { this.x = x; this.y = y; }} //定义三维的点,继承二维 class Point3D extends Point2D { protected int z; public Point3D(int x, int y) { this(x, y, 0); } public Point3D(int x, int y, int z) { this.x = x; this.y = y; this.z = z; }} //定义二维的位置 class Position2D { Point2D location; public Position2D() { this.location = new Point2D(); } public Position2D(int x, int y) { this.location = new Point2D(x, y); } public Point2D getLocation() { return location; }} //定义三维的位置,继承二维的位置 class Position3D extends Position2D { Point3D location; //在这里已经变成Point3D的类型了 public Position3D(int x, int y, int z) { this.location = new Point3D(x, y, z); } @Override //注释是重写方法 public Point3D getLocation() { return location; //返回是子类的类型而不是原来的类型了 } } |