Java 方法重载 方法重写

时间:2023-03-09 06:32:04
Java 方法重载  方法重写

方法重载规则

  1. 参数个数不同
  2. 参数个数相同,但参数列表中对应的某个参数的类型不一样
  3. 方法的返回类型和参数名称不参与重载
  4. "编译期绑定",,因为未产生对象,只看参数、引用类型绑定方法

	public void f(String s,int i) {}

	public void f(int i,String s) {} //重载是正确的,这个点很难理解,大概是符合第二条规则

	public void  f(String string ,int i,int j) {} //第一条规则

     // public int f(String s ,int i){}//重载错误,返回值不参与重载判定

     // public void f(String s1 ,int i1){}//重载错误,参数名不参与重载判定

基本数据类型的重载

  • char变量如果没有char参数的方法,会进入int参数方法

示例代码

public class Override {

    //基本数据类型的重载
void g(int ch) {System.out.println("char to int");} public static void main(String[] args) {
Override override= new Override();
char ch= '5';
override.g(ch); }
} 结果:char to int
  • 不存在byte,short常量,所有的不是long的整型数都是int,所以在进行基本数据重载时,要注意这点

示例代码

public class Override {

	//基本数据类型的重载
void f(char ch) {System.out.println("char");}
void f(int i) {System.out.println("int");}
void f(byte bt) {System.out.println("byte");}
void f(short st) {System.out.println("short");}
void f(long l) {System.out.println("long");} public static void main(String[] args) {
Override override= new Override();
override.f(5);
}
} 结果:int

方法重写(两同两小一大原则)

  • 方法名相同

  • 参数类型相同

  • 子类返回类型小于等于父类方法返回类型(基本数据类型必须等于,引用数据类型可以小于,Java中子类小于父类)

  • 子类抛出异常小于等于父类方法抛出异常

  • 子类访问权限大于等于父类方法访问权限

  • “运行期绑定”,因为产生了对象,所以看对象类型绑定方法

class Father{

    void show();

    Father talk(){

        return null; 

    }

}

class Son extends Father{

    void show(); //正确,完全相同

    void show(){ //正确,子类重写父类方法

        super.show();
System.out.print("show"); } Son talk(){ return null; }//正确,返回数据类型小于父类 /* 错误 * int show();类型错误,基本数据类型必须父子相同 * Object talk(){ return null; }; 类型错误,引用数据类型必须父类大于等于子类 */ }