方法覆盖原则
方法的覆盖(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 版权协议,转载请附上原文出处链接和本声明。