十四、Java基础之方法重写/覆盖

/*
一、关于方法的重写/覆盖:
  1.什么时候需要方法重写?
   如果父类中的方法无法满足子类中的业务需求,需要将父类中的方法重写一次
  2.子类如果重写父类的方法之后,子类对象一定调用的方法是重写之后的方法
  3.发生方法覆盖的条件
  1.发生在具有继承关系的两个类之间
  2.必须具有相同的方法名,相同的返回值类型,相同的参数列表
  3.重写的方法不能比被重写的方法拥有更低的权限访问(父类中带有public---子类中不能丢失public;父类中没有public---子类中可带有public)
   4.重写的方法不能比被重写的方法抛出更宽泛的异常(异常机制)
   5.私有方法不能被覆盖
   6.构造方法无法被覆盖。因为构造方法无法被继承
  7.静态方法不存在覆盖
  8.覆盖指的是成员方法,和成员变量无关
    4.继承最基本的作用,代码重用
4.继承最基本的作用:方法的重写
*/
public class testMethod01 {

    public static void main(String[] args){

        Dog d=new Dog();
        d.m1(100);
        Animal a=new Animal();
        a.m1(66);


    }
}
//父类,动物
class Animal{

    //Field
    int age;
    //Constructor
    Animal(){}

    public void m1(int age){
        System.out.println("动物的基本年龄是"+age);
    }
}
//子类,狗
class Dog extends Animal{

    public void m1(int age){
        System.out.println("dog的基本年龄是"+age);
    }
}

 二、覆盖与重写

1.私有方法不能被覆盖
2.构造方法无法被覆盖。因为构造方法无法被继承

//父类
class TestA {

    private void m1(){
        System.out.println("A----m1");

    }
    public static void main(String[] args){

        //多态
        TestA t=new TestB();

        t.m1();//A---m1


    }
}
//子类
class TestB extends TestA{

    //尝试重写父类私有方法
    private void m1(){
        System.out.println("B-----m1");

    }
}
3.静态方法不存在覆盖
public class Test02 {
    public static void main(String[] args){

        A a=new B();

        a.m1();//A-----m1

    }
}

class A{
    //静态方法
    public static void m1(){
        System.out.println("A-----m1");
    }
}

class B extends A{
    //尝试重写父类的静态方法
    public static void m1(){
        System.out.println("B-----m1");
    }
}


原文地址:https://www.cnblogs.com/chushujin/p/10052988.html