方法覆盖(override)原则和static方法隐藏

  • Post author:
  • Post category:其他


方法覆盖原则

方法的覆盖(override)

两同两小一大

原则:(重写、覆盖)方法名相同,参数列表(参数类型,参数个数,参数顺序)相同

  • 子类返回类型小于等于父类方法返回类型
  • 子类抛出异常小于等于父类方法抛出异常
  • 子类访问权限大于等于父类方法访问权限

    • 为什么不能降低可见性,因为每个子类的实例都应该是一个基类的有效实例,如果降低了方法的可见性,那么就相当于子类

      失去

      了一个父类的方法,这个时候,父类将不是一个有效的基类

static方法隐藏

static方法是属于类的,不属于对象,覆盖和重写说的是对象的方法

  • 如果子类拥有和父类一样的static方法则父类static方法被隐藏
  • 类不会从它的superinterface继承静态方法
  • 接口不从superinterface继承静态方法

声明一个父类引用,创建了一个子类对象。调用子类覆盖父类后的静态方法,依然会执行父类的静态方法(与用动态绑定的多态刚好

相反

  • 因为

    静态方法不属于对象

    ,所以执行的仍然是父类的静态方法
public class NewFeature
{
    public static void main(String[] args)
    {
        A a = new B();
        a.sayInt();     //结果是hello,执行的是A类的sayInt
    }
}

class A
{
    public static void sayInt()
    {
        System.out.println("hello");
    }
}

class B extends A
{
    public static void sayInt()
    {
        System.out.println("world");
    }
}



版权声明:本文为u013089991原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。