【笔记】多态之Override

Override是子类与父类多态性的表现。

 

关于Override需要注意几点地方:

1.被覆盖方法的访问控制级别可以不一样。 

但子类的访问级别必须要高于父类被覆盖方法的访问级别,如果父类是public的而子类是protected的则是错误的。

 

2.方法被定义为private或static或final的则不能被覆盖。 

3.方法的返回类型:子类的返回类型可以是更具体的对象,例如可以将Employee类的返回类型改为Object也正确。而倒过来则错误。 

4.在方法调用时先会在子类中找覆盖的方法,如果子类中没有则会在父类中去找。 

 

然后让我们看一个坑爹的例子:

package learn;
public class Parent {  
      
    private  int num(int i,int j){  
        return i+j;  
    }  
      
    public static void main(String[] args) {  
        Parent p = new Child();  
        System.out.println(p.num(1, 2));  
    }  
}  
class Child extends Parent{  
      
    public int num(int x,int y){  
        return x-y;  
    }  
} 

得出的结果是:3

因为Parent中的num()方法是私有函数,所以Child类中的num()并不是继承Parent中的num()方法。

而p的的类型是Parent,因此调用p的num()时,使用的是父类的num()方法。

 

那如果将p的构造方法替换一下

Child p = new Child();

这时得到的结果是:-1

 

如果将父类中num()方法的修饰符给修改一下

package learn;
public class Parent {  
      
    protected   int num(int i,int j){  //这里
        return i+j;  
    }  
      
    public static void main(String[] args) {  
        Parent p = new Child();  //和这里
        System.out.println(p.num(1, 2));  
    }  
}  
class Child extends Parent{  
      
    public int num(int x,int y){  
        return x-y;  
    }  
} 

因为父类中num()方法的修饰符变成了protected,这样子类就能覆盖父类中的方法,

因此在调用时会优先调用子类的方法。

得到的结果是:-1

 

 

转载于:https://www.cnblogs.com/nonkicat/archive/2012/09/22/2697861.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值