函数的重载就是在同一个类中允许同时存在一个以上的同名函数,只要它们的参数个数或类型不同即可。
§
在同一个类中可以定义多个
同名
方法—方法名重载(overload)
public class PrintStream{
public void print(int i) {……}
public void print(float f) {……}
public void print(String s) {……}
}
§ 重载方法的参数列表必须不同
§ 重载方法的返回值类型可以相同,也可以不同
§ 调用时根据方法的参数类型来区别。
print(3);print(1.2f);print(“hello!”);
(PS:其实这里说的函数的重载,但是,平常我们也可以是方法的重载,它可以起到的功能是只需要记忆一个方法名(函数名),就可以服务于多种功能。方法名,参数表的不同就构成了重载,返回值类型是否相同不作为重载的依据。也就是说判断有没有没重载主要就是参数这一点)
public class AddUtil{
public static int add(int a,int b){
return a+b;
}
public static double add(double a,double b){
return a+b;
}
public static double add (int a,double b){
return a+b;
}
public static void main (String args){
add(3,5);
add(1.0,2.0);
add(1,5.0);
add(5.0,1);
}
}
使用重载的优点是方便了程序员(用户)的使用,开发者只需要记忆一个方法,通过传递不同的方式调用 相对应的代码逻辑。
•
练习程序:
(1)编写程序,定义三个重载方法并调用。方法名为mOL。
–三个方法分别接收一个int参数、两个int参数、一个字符串参数。分别执行平方运算并输出结果,相乘并输出结果,输出字符CallMOL串信息。
定义三个重载方法max,第一个方法求两个int值中的最大值,第二个方法求两个double值中的最大值,第三个方法求三个double值中的最大值,并分别调用三个方法。
2、this
果然越来觉得,看书与视频最大的不同在于,视频是别人通过自己的理解再形象的把自己的理解表现自己的理解表现出来的一种
视频上,用这样的关系的形容this与成员方法之间的关系,而我自己的看书对this方法的理解是要到父类中的方法时,可以用this.
两个都不能说有错,但是明显,这里更深刻些。这是书本,所不能达到的。但只看视频,会先为入主,以后对某个概念的看法,会局限于同一个点。
this(name, age, null);这句和
this.name=name;
this.age=age
this.birthDate(一个变量,具体是什么看情况的)=null
三句的效果是一样的。
•
练习:定义Person类,有4个属性:String name; int age; String school; String major
•
(1)定义Person类,有4个属性:String name; int age; String school; String major,
(2)定义Person类的3个构造方法:
第一个构造方法Person(String n, int a)设置类的
name和age属性;
第二个构造方法Person(String n, int a, String s)设置类的name,
age 和school属性;
第三个构造方法Person(String n, int a, String s, String m)设置类的name, age ,school和major属性;
(3)在main方法中分别调用不同的构造方法创建的对象,并输出其属性值
public class Person {
private String name;
private int age;
private String school;
private String major;
public Person(String n,int a){
this.name=name;
this.age=age;
}
public Person(String n,int a,String s){
this.name=name;
this.age=age;
this.school=school;
}
public Person(String n,int a,String s,String m){
this.name=name;
this.age=age;
this.school=school;
this.major=major;
}
public Person(int i) {//注意调用构造函数的时候不能用static
// TODO Auto-generated method stub
new Person( "张三",24,"宾夕法尼亚大学莫尔学院","计算机");
}
}
3、关于昨天C/C++垃圾回收机制的问题,因为java内存回收工作由虚拟机做好,而C++是直译程序(直接编译成汇编),而Java等脚本是解释执行程序(PS:虽然现在的JVM也提供了部分的部直译功能),所以总结一下,也就是说,C++的内存是编写者自己管理的,而Java的内存是由虚拟机管理的。虽然C++要手动。(其实我还是有个疑问,和析构器有什么关系呢)