方法重载:
方法重载是指方法名和方法的返回类型都相同,但方法参数不一样.
参数不一样体现在参数个数、参数类型以及参数类型的顺序 不一样(三条满足一条即不一样).
举个例子:
Test.java
public class Test
{
public static void main(String[] args){
Test ts = new Test() ;
System.out.println(ts.ss(“s1”,“s2”)) ;
System.out.println(ts.ss(“s1”)) ;
}
public String ss(String s1,String s2){
return s1+s2 ;
}
public String ss(String s1){
return s1 ;
}
}
其中ss就形成了方法重载.
此程序可运行!
方法重写:
方法重写是相对继承而言的.
重写的方法名.返回类型,参数类型和参数个数都要求和父类中的一样.这是重载和重写形式上的区别.
当类继承某个类的时候 .一些属性和方法也被继承过来了.这样就可以用子类对象调用父类中的某个方法.但如果你对父类中的方法不满意,便可以对父类中的方法进行重写.实现你想要的功能!!!
在调用重载方法时,如果提供精确匹配的方法就做精确匹配,如果没有提供精确匹配的方法就做相对精确匹配。如果多个相同程度的相对精确匹配的方法就匹配不到,就会报错。(最好提供精确匹配),有如下代码部分验证:
package cn.tedu.method;
public class MethodDemo2 {
//在java值唯一确定方法–发签名(由方法名和参数列表共同决定)
public static void main(String[] args) {
//充值方法的调用
//当提供精确匹配方法,就做精确匹配
//提供多个相同程度的相对精确匹配的方法局匹配不到了
System.out.println(sum(1,2));
}
//求和方法
//sum(int,int)
public static int sum(int m,int n){
System.out.println("int int");
return m+n;
}
//sum(double,int)
public static double sum(double m,int n) {
System.out.println("double int");
return m+n;
}
sum(int,double)
public static double sum(int m,double n){
System.out.println("double double");
return m+n;
}
}
方法传值
1、当实参为基本数据类型时传递的是拷贝值
2、当实参为引用数据类型时传递的是地址值的拷贝
如果拷贝的地址值找到原堆内存就有可能有影响
如果拷贝的地址值没有找到原堆内存做任何操作都不会有影响
有参有返回值
有参无返回值
无参有返回值
无参无返回值 具体看代码部分:
package cn.tedu.method;
public class MethodDemo3 {
//java值的方法被调用都是加载到栈中执行
public static void main(String[] args) {
//int i=1;
//实参—实际传入的值
//当实参类型是基本数据类型时传递的是值的拷贝
//m(i);
int[] arr={1,2,3};
//数组元素是基本数据类型传递的是值的拷贝
//m(arr[0]);
//当实参类型是引用数据类型时传递的是地址值的拷贝
mn(arr);
System.out.println(arr[0]);
}
//形参---接受实参的值
public static void m(int i){//接受的是拷贝值
i+=2;//操作拷贝值时不会影响原来的值
}
public static void n(int[] arr){//接受的是拷贝的地址值
arr[0]=9;//根据拷贝的地址值找到堆内存改变元素值
}
public static void mn(int[] arr){//接受的是拷贝的地址值
arr=new int[2];//拷贝的地址值被新数组的地址值被覆盖了
arr[0]=9;//arr指向新数组改变元素并不会影响原堆内存的元素值
}
}