方法的覆盖(重写)

关于封装、继承和多态的概念这里就不再赘述,本文只描述方法覆盖(重写)的条件及限制。
 一:关于方法的覆盖

    1.什么时候方法要进行重写?
        如果父类中的方法已经无法满足当前子类的业务需求,需要将父类中的方法进行重新写一遍。

    2.子类如果重写父类中的方法之后,子类对象一定调用的是重写之后的方法。

    3.发生方法覆盖的条件:
  • 发生在具有继承关系的两个类之间
  • 必须具有相同的方法名,相同的返回值类型,相同的参数列表.
  • 重写的方法不能比被重写的方法拥有更低的访问权限。
  • 重写的方法不能比被重写的方法抛出更宽泛的异常。(异常机制再讲。)
  • 私有的方法不能被覆盖。
  • 构造方法无法被覆盖。因为构造方法无法被继承。
  • 静态的方法不存在覆盖。
  • 覆盖指的是成员方法,和成员变量无关。

    4.继承最基本的作用:代码重用。 继承最重要的作用:方法可以重写。

public class Test01{
    public static void main(String[] args){

        //创建子类对象
        Cat c = new Cat();

        //调用方法
        c.move();


        Animal a = new Animal();
        a.move();

    }
}

//父类:动物
class Animal{

    //成员方法
    public void move(){
        System.out.println("动物在移动!");
    }

}

//子类:猫
class Cat extends Animal{

    //Cat的move方法应该输出:猫在走猫步!
    //Animal中的move方法已经无法满足Cat了。
    //所以要在Cat类中对Animal类中的move方法进行重新定义(方法的覆盖,方法的重写,Overwrite,Override)
    public void move(){
        System.out.println("猫在走猫步!");
    }

}



    私有的方法无法被覆盖
//父类
class A{

    //私有方法
    private void m1(){
        System.out.println("A'm1 method invoke!");
    }

    //入口
    public static void main(String[] args){

        //多态
        A a = new B();

        a.m1(); //A'm1 method invoke!
    }
}


//子类
class B extends A{
    //尝试重写父类私有的方法
    public void m1(){
        System.out.println("B'm1 method invoke!");
    }
}
    静态的方法不存在覆盖
public class Test03{

    public static void main(String[] args){

        A a = new B();
        //静态方法不存在覆盖,因为静态方法执行和对象无关。
        a.m1(); //A's m1 method invoke!

        A.m1();
        B.m1();
    }
}

class A{

    //静态方法
    public static void m1(){
        System.out.println("A's m1 method invoke! ");
    }
}
class B extends A{

    //尝试重写父类的静态方法
    public static void m1(){
        System.out.println("B's m1 method invoke! ");
    }
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章