JAVA 方法重写

子类通过重写可以隐藏已继承的方法(方法重写称为方法覆盖(method overriding))

1、重写的语法规则:

如果子类可以继承父类的某个方法,那么子类就有权利重写这个方法。所谓方法重写,是指子类中定义一个方法,这个方法的类型和父类的方法的类型一致或者是父类的方法的类型的子类型,并且这个方法的名字、参数个数、参数的类型和父类的方法完全相同。

2、重写的目的:

子类通过方法的重写可以隐藏继承的方法,子类通过方法的重写可以把父类的状态和行为改变为自身的状态和行为。
重写的方法即可以操作继承的成员变量、调用继承的方法,也可以操作子类新声明的成员变量、调用新定义的其它方法,但无法操作被子类隐藏的成员变量和方法。如果子类想使用被隐藏的方法或成员变量,必须使用关键字super。
举例:

package 方法重写;

public class University {
   void enterRule(double math,double english,double chinese) {
	   double total=math+english+chinese;
	   if(total>=180) {
		   System.out.println(total+"分数线达到大学录取线");
	   }
	   else {
		   System.out.println(total+"分数线未达到大学录取线");
	   }
   }
}

package 方法重写;

public class ImportantUniversity extends University{
	 void enterRule(double math,double english,double chinese) {
		   double total=math+english+chinese;
		   if(total>=220) {
			   System.out.println(total+"分数线达到重点大学录取线");
		   }
		   else {
			   System.out.println(total+"分数线未达到重点大学录取线");
		   }
	   }
}

package 方法重写;

public class E5_4 {

	public static void main(String[] args) {
		double math=62;
		double english=76.5;
		double chinese=67;
		ImportantUniversity univer=new ImportantUniversity();
		univer.enterRule(math, english, chinese);//调用重写的方法
		math=91;
		english=82;
		chinese=86;
		univer.enterRule(math, english, chinese);//调用重写的方法
	}

}

在这里插入图片描述
注意:重写方法的类型可以是父类方法类型的子类型,即不必完全一致:

package 方法重写;

class A{
	Object get() {
		return null;//返回一个空对象
	}
}

class B extends A{
	Integer get() {//Integer get是Object的子类
		return new Integer(100);//返回一个Integer对象
	}
}
public class E5_6 {

	public static void main(String[] args) {
		B b=new B();
		Integer t=b.get();
		System.out.println(t.intValue());
	}

}

3、重写的注意事项:

重写父类的方法时,不允许降低方法的访问权限,但可以提高访问权限(访问限制修饰符按访问权限从高到低的排序是public\protected\友好的\private):
举例:

package 方法重写;

class A{
	
	protected float f(float x,float y) {
		return x-y;
	}
}

class B extends A{
	float f(float x,float y) {//非法,因为降低了访问权限
		return x+y;
	}
}
class C extends A{
	public float f(float x,float y) {//合法,因为提高了访问权限
		return x*y;
	}
}
public class 注意事项 {
    public static void main(String args[]) {
    	
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值