java java面向对象-方法覆盖

20180312 java java面向对象-方法覆盖

场景:
当父类的方法不适合子类的特征的时候,应该采取方法覆盖:
eg:
class Bird{
  public void fly{
    System.out.println("飞");
  }
}


//企鹅类
class Penguin extends Bird{


  //重新定义了fly()
  public void fly{
    System.out.println("我不会飞");
  }
}


class OverrideDemo{
public void static main(String[] args)
{
  //创建一个企鹅对象,并调用其飞翔的方法
  Penguin p = new Penguin();
  //先从子类中去寻找fly方法,若找到就执行
  //若找不到就去父类中区寻找fly方法
  p.fly();//输出  "我不会飞"   ,这就是覆盖
}
}


只有方法才有覆盖的概念。又叫方法的复写,又叫方法的覆写,英文叫override。


方法覆盖的原则(一同两小一大):
一同:1、实例方法的签名必须相同(方法签名= 方法名+方法的参数列表),即覆盖函数与被覆盖函数,只能函数体不同。
两小:2、子类方法的返回值类型是和父类方法的返回类型相同或者是其子类,即子类可以返回一个更加具体的类,如,子类和父类都返回int型数据;或父类返回Object类型,而子类返回String类型的数据(String是Object是子类,即子类返回一个更加具体的类),但该方法不常用。
3、子类方法声明抛出的异常类型和父类方法声明抛出的异常类型相同或者是其子类。
4、子类方法的访问权限比父类方法的访问权限要更大或相等,例如:
eg1:(可以)//父类
protected void fly{}
//子类
public void fly{}


eg2:(可以)
//父类
protected void fly{}
//子类
protected void fly{}


eg3:(不可以)//父类
public void fly{}
//子类
private void fly{}


eg4:(不可以)//父类
private void fly{}
//子类
private void fly{}




判断是否是方法覆盖的必杀技:在覆盖函数(子类函数)上一行写 @override:若方法是覆盖方法,则会编译通过,否则会编译报错。
eg://父类
private void fly{}
//子类
@override//"@override"会检查子类中的fly是 
         //否为覆盖方法,并在编译期给出提示信息,
        //仅在java5以上的系统中支持该判断语句
private void fly{}










只有方法有覆盖的概念,字段没有覆盖的概念。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值