详述重写

首先掷出三个问题:为什么要重写?什么是重写?怎么重写?

1.为什么重写?

例子:比如父类方法中关于吃东西的方法eat,父亲由于年迈,只会用手抓饭吃。然而儿子在外见过世面,会使用筷子吃饭了。那么当儿子继承了父亲的eat方法后,儿子也只能用手抓饭。显然,父亲老套的用手抓饭的方法已经不能够满足儿子的吃饭方式了。换句话来说,就是当“不能准确形容子类自身的特征”的时候,这个时候我们要进行重写的操作。

2.什么是重写?

顾名思义,重新书写,或重新改写。

就是在子类中写一个跟父类一样的方法,但是这个方法有一些要求。

package sunnny;

public class Father 
{
	public void eat() 
	{
		System.out.println("用手抓饭");
	}
}
package sunnny;

public class Son extends Father{

	public  void eat() {
		System.out.println("用筷子吃饭");
	}
	public static void main(String[] args) {
		Son son=new Son();
		son.eat();
	}
}

这两段就是在子类中重写了eat方法,这时我们可以看到,输出结果是用筷子吃饭。

3.怎么重写?

重写不是简单地把父类的代码复制到子类里,他有一些形式上的要求。

  • 返回值类型的要求:如果父类的返回值类型为基本数据类型或者是void,那么子类中的返回值类型必须和父类相同。                                              如果父类的返回值类型为引用数据类型,那么子类中返回值类型必须父类数据类型的子类或者相同。                                      object是所有引用数据类型的父类。

  • 方法名和参数列表:要求子类与父类的方法名和参数的数据类型和个数必须相同。

  • 访问权限子类重写的方法不能缩小父类被重写方法的访问权限,子类重写方法的访问权限必须大于等于父类被重写方法的访问权限。访问权限由大到小排序:public  protected friendly private,但注意父类不可以用private来修饰!

  • static:用于重写的父类和子类都不能用static来修饰!父类静态方法可以被继承,但是不能被重写。

  • final:父类中被final关键字修饰的方法可以被子类继承,但却不能被子类重写。

  • 当重写了方法之后,必须调用父类方法的时候①对于非静态代码块或者方法,使用super调用。                                                                                                                      ②对于静态代码块或方法,必须创建父类对象调用。

  • @Override:java为标注重写后的方法,使用@Override

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值