重写(Override):子类对父类的允许访问的方法的实现过程进程重新编写,返回值和参数类型都不改变
方法的重写规则:
1)参数列表、返回类型必须与重写方法相同
2)访问权限不能比父类中被重写的方法的访问权限更低
3)父类的成员方法只能被子类重写
4)声明为final的方法不能被重写
5)声明为static的方法不能被重写,但是能够被再次声明
6)子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为private和final的方法
子类和父类不在同一个包中,那么子类只能够重写父类的声明为public和protected的非final方法
7)重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者
比被重写方法声明的更广泛的强制性异常,反之则可以(例:父类抛出了IOException异常,子类重写就不能抛出一个 Exception异常)
8)构造方法不能被重写
9)如果不能继承一个方法,则不能重写这个方法
class Animal{
public void eat(){
System.out.prinntln("吃东西")}
}
class Pig extends Animal{
public void eat(){
System.out.println("猪猪喜欢吃东西");
}
public void sleep(){
System.out.println("猪猪喜欢睡觉");
}
}
public class Test{
public static void main(String[] args){
Animal p=new Pig;
p.eat();
p.sleep();//编译会出现错误,因为p的引用类型Animal没有sleep方法
}
}
重载(Overload):在一个类里面,方法名相同,而参数不同,返回类型可以相同也可以不同
重载规则:
1)被重载的方法必须改变参数列表和返回类型
2)被重载的方法可以改变访问修饰符
3)被重载的方法可以声明新的或更广的检查异常
4)方法能够在同一个类中或者一个子类中被重载
class Dog{
public void bark(){
System.out.println("狗叫");}
public void bark(int n){
if(n>10){
System.out.println("狼叫");}
}
}