Java---方法重写

什么是方法重写(overriding)?

  1. 子类根据需求从父类继承的方法进行重新编写
  2. 重写是,可以使用super.方法的方式来保留父亲的方法
  3. 构造方法不能被重写

举个栗子,如果父类中有个输出宠物姓名和年龄的方法,但是要求输出狗的品种和猫的声音
在这里插入图片描述
那么到底怎么重写呢?
在这里插入图片描述
话不多说,上代码
Animal作为父类,有这动物的共有属性,名字和年龄,并且有print方法输出动物的信息

public class Animal {
	private String name;
	private int age;

	public void  setName(String name) {
		this.name = name;
	}
	public String getName() {
		return name;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public int getAge() {
		return age;
	}
	public void print(String name, int age) {
		this.name = name;
		this.age = age;
	}
}

Cat继承Animal,拥有自己的特有属性voice

public class Cat extends Animal{
	private String voice;
	
	public void setVoice(String voice) {
		this.voice = voice;
	}
	public String getVoice() {
		return voice;
	}
	public Cat(String voice) {
		this.voice = voice;
	}	
	public void print(String name, int age) {
		super.print(name, age);//使用super.print保留父类的方法
		System.out.println("宠物的名字是:"+getName()+"年龄:"+getAge()+"岁 我会"+getVoice());
	}
}

Dog继承Animal,同时有自己的特有属性:Strain

public class Dog extends Animal{
	private String strain;
	
	public void setStrain(String strain) {
		this.strain = strain;
	}
	public String getStrain() {
		return strain;
	}
	
	public Dog(String strain) {
		this.strain = strain;
	}
	public void print(String name, int age) {
		super.print("阿黄",7);
		this.strain = "哈士奇";
		System.out.println("宠物的名字是:"+name+"年龄:"+age+"岁 品种是:"+getStrain());
	}
}

最后输出的结果就是一开始的图

方法重写的规则

  • 方法名相同
  • 参数列表相同(数量,顺序,数据类型)
  • 如果有返回值,返回值相同或者是其子类
  • 访问权限不能严于父类
  • 父类的静态方法不能被重写为非静态方法,反之父类的非静态方法不能被重写为静态方法
  • 子类可以定义与父类同名的静态方法,以便在子类中隐藏父类的静态方法(静态方法中无法使用super、this)
  • 父类的私有方法不能被子类重写(private修饰的)
  • 不能抛出比父类更多的异常(这是啥?学了异常你就知道了)

PS:静态方法中不能使用super、this关键字,this指向本类中已存在的对象,super是对父类对象的引用,指向父类对象,而静态方法是优先于对象的,所以在静态方法中使用super、this时,由于指向的对象晚于静态方法出现,所以指向的是啥也没有

  • 22
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值