类与对象的学习(六)------方法覆盖(重写)

方法覆盖(重写)

  • 简单的说:方法覆盖(重写)就是子类有一个方法,和父类的某个方法的名称返回类型参数一样 , 哪我们就说子类的这个方法覆盖了父类的方法.(返回类型和父类的方法一样并不准确,应该是子类方法的返回类型应该和父类的方法一样或者是父类返回类型的子类)
  • 接下来通过代码了解一下方法覆盖(重写):
	//这里是父类Animal
	public class Animal {
	    public void cry() {
	        System.out.println("动物的叫声");
	    }

	    public Object m1() {//父类中m1方法的返回类型是Object
	        return null;
	    }
	
	    public String m2() {//父类中m2方法的返回类型是String
	        return null;
	    }
	
	    protected void eat() {//父类中eat方法的访问权限是Protected
			System.out.println("动物进食");
	    }
}
	//这是子类Dog
	public class Dog extends Animal {
    /*
    1.因为Dog继承了Animal Dog是Animal的子类
    2.而Dog中的cry()方法 和 Animal类中的cry()方法定义形式(名称,返回类型,参数)一致
    3.这时候我们就可以说Dog中的cry()方法重写了Animal的cry方法
     */
    public void cry(){
        System.out.println("小狗汪汪叫");
    }

    //m1方法的返回类型是String 与父类中的m1方法比较
    //父类中m1方法是Object类型 , String属于Object的子类
    //所以子类方法的返回类型和父类一致(属于父类方法的返回类型的子类)
    public String m1(){
        return null;
    }

   
    //如果定义m2方法的返回类型是Object会报编译错误
    //报错截取:attempting to use incompatible return type
    /*
    原因:
    子类方法的返回类型应该和父类的方法一样或者是父类返回类型的子类
    而Object并不是String的子类 而是String的父类
     */

    public Object m2(){//这里是错误的 返回类型不可以是Object
        return null;
    }

    //报错截取:attempting to assign weaker access privileges ('private'); was 'protected'
    //这里报的错是Dog类中的eat()方法试图缩小父类方法的访问权限 , 这是错误的
    //子类方法不能缩小父类方法的访问权限

    public void eat(){

    }


}

tips:在编译源代码时,当遇到没有父类的类时,编译器会将其指定一个默认的父类(一般为Object)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值