全新java初学者实践教程15(java SE5.0版)jdk5中方法的重载与重写
来源:互联网 发布:什么是网络代理服务器 编辑:程序博客网 时间:2024/05/20 03:47
Java语言中的概念就是多,这回又有两个概念,重载和重写。这是两个新概念,也是两个令初学者容易混淆的概念。他们的概念截然不同,只不过都有个“重”字,就以为是很像的。
下面解释一下这两个概念:
方法重载(overloading method) 是在一个类里面,方法名字相同,而参数不同。返回类型呢?可以相同也可以不同。
方法重写(overiding method) 子类不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。方法重写又称方法覆盖。如果还是搞混的话,就把“重写覆盖”,这个词多念几遍吧。知道是覆盖的话,就知道是子类覆盖父类的方法了。
实践: 重载的例子
void recieve(int i) {
System.out.println("接收一个int数据");
System.out.println("i="+i);
}
void recieve(float f) {
System.out.println("接受一个float型的数据");
System.out.println("f="+f);
}
void recieve(String s) {
System.out.println("接受一个String型数据");
System.out.println("s="+s);
}
public static void main(String[] args){
MethodOverloading m = new MethodOverloading();
m.recieve(3456);
m.recieve(34.56);
m.recieve(“百家拳软件项目研究室“);
}
}
大家看到了上面的例子方法receive()有三个,名字相同参数不同。这样的话,在main()调用的时候,参数用起来就很方便了。重写的例子似乎不用举了,记不住的话,就和“覆盖”。一起念。
有时候,重载和重写的方式有些复杂,在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; //返回是子类的类型而不是原来的类型了
}
} 代码打包下载
本文转自
http://www.java3z.com/cwbwebhome/article/article2/javas15.html
- 全新java初学者实践教程15(java SE5.0版)jdk5中方法的重载与重写
- 全新java初学者实践教程15(java SE5.0版)--jdk5中方法的重载与重写
- 全新java初学者实践教程9(java SE5.0版)jdk5的数组
- 全新java初学者实践教程10(java SE5.0版)jdk5的集合类
- 全新java初学者实践教程11(java SE5.0版)jdk5的泛型声明
- 全新java初学者实践教程8(Java SE5.0版)jdk5的拆箱与装箱
- 全新java初学者实践教程9(java SE5.0版)----jdk5的数组
- 全新java初学者实践教程11(java SE5.0版)----jdk5的泛型声明
- 全新java初学者实践教程2(Java SE5.0版)“HelloWorld”和jdk的使用
- 全新java初学者实践教程1(Java SE5.0版)配置环境变量
- 全新java初学者实践教程3(Java SE5.0版)基本语法1
- 全新java初学者实践教程4(Java SE5.0版)基本语法2
- 全新java初学者实践教程6(Java SE5.0版)基本语法3
- 全新java初学者实践教程7(Java SE5.0版)基本语法4
- 全新java初学者实践教程12(java SE5.0版)面向对象
- 全新java初学者实践教程13(java SE5.0版)面向对象之多态
- 全新java初学者实践教程14(java SE5.0版)垃圾收集器
- 全新java初学者实践教程5(Java SE5.0版)基本类型变量和引用类型变量
- 半透明及透明位图的实现技术
- makefile中wildcard notdir patsubst的简单介绍
- Discuz的passport与其他登录系统的整合
- Chirsatmas病毒清除方法
- ASP.NET页面打印技术的总结
- 全新java初学者实践教程15(java SE5.0版)jdk5中方法的重载与重写
- Discuz! Passport 接口技术文档
- I/O重定向 详解及例子!
- 权限与角色数据库结构(转载)
- 実際週報紹介 - サンポル
- C#改为delphi
- Q3以太网交换机市场增长10% 思科大增
- 做人应该知道的十个道理
- C++之父Bjarne Stroustrup写的《The C++ Programming Language (Special Edition)》中各章后面的忠告