Java中重载和重写的区别
1.1重载是什么
Overloading 方法重载是让类以统一的方式处理不同类型数据的一种手段,多个同名函数同时存在,具有不同的参数个数/类型
1.2为什么用重载
重载是一个类中多态性的一种表现
Java的方法重载就是在类中创建多个方法,他们具有相同的名字,但具有不同的参数和不同的定义
调用方法是通过传递给他们的不同参数个数和参数类型决定具体使用哪个方法,这就是多态性
1.3重载的规则
1) 必须具有不同的参数列表
2) 可以有不同的返回类型,只要参数列表不同就行了
3) 可以有不同的访问修饰符
4) 可以抛出不同的异常
5) 对于继承来说,如果某一方法在父类中访问权限是private,那么就不能让子类对其进行重载,如果定义的,也只是定义了一份新方法,不会达到重载的效果
1.4代码展示
public class Dog {
Dog()
{
this.bark();
}
void bark()//bark()方法是重载方法
{
System.out.println("no barking!");
this.bark("female", 3.4);
}
void bark(String m,double l)//注意:重载的方法的返回值都是一样的,
{
System.out.println("a barking dog!");
this.bark(5, "China");
}
void bark(int a,String n)//不能以返回值区分重载方法,而只能以“参数类型”和“类名”来区分
{
System.out.println("a howling dog");
}
public static void main(String[] args)
{
Dog dog = new Dog();
//dog.bark();
//dog.bark("male", "yellow");
//dog.bark(5, "China");
2.1重写是什么
重写英文override,也叫覆盖,从字面就可以知道,它是覆盖了一个方法并且对其重写,以求达到不同的作用。
2.2为什么用重写
对我们来说最熟悉的覆盖就是对接口方法的实现,在接口中一般只是对方法进行了声明,而我们在实现时,就需要实现接口声明的所有方法。除了这个典型的用法以外,我们在继承中也可能会在子类覆盖父类中的方法
2.3重写规则
1) 参数列表必须完全与被重写的方法相同,否则不能城区为重写二是重载
2) 返回类型必须一直与被重写的方法的返回类型相同,否则不能成为重写二是重载
3) 访问修饰符的限制一定要大于被重写方法的访问修饰符(public)protected》default》private)
4) 重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常,例如,父类的一个方法申明了一个检查异常IOException,在重写这个方法就是不猛抛出Exception,只能抛出IOException的子类异常,可以抛出非检查异常
5) 被重写的方法不能为private,否则在其子类中只是定义了一份方法,并没有对其进行覆盖
2.4代码展示
public class Base
{
void test(int i)
{
System.out.print(i);
}
void test(byte b)
{
System.out.print(b);
}
}
public class TestOverriding extends Base
{
void test(int i)
{
i++;
System.out.println(i);
}
public static void main(String[]agrs)
{
Base b=new TestOverriding();
b.test(0)
b.test((byte)0)
}
}
两者比较
重载 overloading
1) 参数类型,个数,顺序至少有一个不同
2) 不能重载只有返回值不同的方法名
3) 存在于父类和子类,同类中
重写override
1) 方法名,参数,返回值相同
2) 子类方法不能缩小父类方法的访问权限
3) 子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)
4) 存在父类和子类之中
5) 方法被定义为final不能重写