java——重写

目录

方法的重写或方法的覆盖(overriding)

方法重写规则

方法重写vs方法重载

Object类被子类经常重写的方法

equals()方法与操作符==


方法的重写或方法的覆盖(overriding)

子类根据需求对从父类继承的方法进行重新编写

重写时,可以用super.方法的方式来保留父类的方法

构造方法不能被重写

方法重写规则

方法名相同

参数列表相同

返回值类型相同或者是其子类

访问权限不能严于父类

父类的静态方法不能被子类覆盖为非静态方法,父类的非静态方法不能被子类覆盖为静态方法 子类可以定义与父类同名的静态方法,以便在子类中隐藏父类的静态方法(注:静态方法中无法使用super)

父类的私有方法不能被子类覆盖

不能抛出比父类方法更多的异常

方法重写vs方法重载

   比较项

位置

方法名

参数表

返回值

访问修饰符

方法重写

子类

相同

相同

相同或是其子类

不能比父类更严格

方法重载

同类

相同

不相同

无关

无关

Object类被子类经常重写的方法

方法

说明

toString()

返回当前对象本身的有关信息,按字符串对象返回

equals()

比较两个对象是否是同一个对象,是则返回true

hashCode()

返回该对象的哈希代码值

getClass()

获取当前对象所属的类信息,返回Class对象

equals()方法与操作符==

Object类的equals()方法比较两个对象是否是同一个对象,是则返回true

操作符== 简单数据类型,直接比较值。如1==2 ,引用类型,比较两者是否为同一对象

(1)Object类的equals()方法与==没区别

(2)当有特殊需求,如认为属性相同即为同一对象时,需要重写equals()

(3)Java.lang.String重写了equals()方法,把equals()方法的判断变为了判断其值

代码示例:

package cn.bdqn.demo01;

public class Cat extends Pet {

	// 定义Cat类独有的属性
	private String color;

	public Cat() {
		super();// 调用父类Pet类里的无参构造方法
	}

	public Cat(String name, int health, int love, String color) {
		super(name, health, love);
		this.color = color;
	}

	public String getColor() {
		return color;
	}

	public void setColor(String color) {
		this.color = color;
	}
	
	//在Cat类中重写了Pet类中的print方法
	public void print(){
		super.print();
		System.out.println("宠物颜色:"+this.getColor());
	}

}
package cn.bdqn.demo01;

public class Penguin extends Pet {

	// 定义Penguin类里独有的属性
	private String sex;

	public Penguin() {
		super();// super表示父类Pet对象,所以这个地方表示调用父类的无参构造方法
	}

	public Penguin(String name, int health, int love, String sex) {
		super(name, health, love);// 表示调用父类Pet类的有参构造方法
		this.sex = sex;
	}

	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}
	
	@Override
	public void print() {
		super.print();
		System.out.println("宠物性别:"+this.getSex());
	}

}
package cn.bdqn.demo01;

public class Pet {
	private String name;
	private int health;
	private int love;

	// 添加构造方法
	public Pet() {
	}

	public Pet(String name, int health, int love) {
		this.name = name;
		this.health = health;
		this.love = love;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getHealth() {
		return health;
	}

	public void setHealth(int health) {
		this.health = health;
	}

	public int getLove() {
		return love;
	}

	public void setLove(int love) {
		this.love = love;
	}

	public void print() {
		System.out.println("宠物信息:昵称:" + this.getName() + ",健康值:"
				+ this.getHealth() + ",亲密度:" + this.getLove());
	}

}
package cn.bdqn.demo01;

public class Test {

	public static void main(String[] args) {
		//创建子类对象
		Cat cat = new Cat("Tom", 99, 80, "灰色");
		cat.print();
		
		Dog dog = new Dog("来福", 100, 99, "藏獒");
		dog.print();
		
		Penguin penguin = new Penguin("QQ", 99, 98, "公");
		penguin.print();

		
		/*
		 * 各个子类对象是可以通过调用父类中的print()方法来输出子类对象的信息
		 * 但是父类中的print()只能输出相同的属性信息(昵称、健康值、亲密度)
		 * 不能输出每个子类中独有的信息,从而说明父类里的print()方法不能够满足子类对象的使用
		 * 此时需要对父类中的print()方法进行升级(方法重写)
		 * 
		 * 重写的特点:
		 * 	1)在子类中重写
		 * 	2)方法名相同
		 * 	3)参数列表相同
		 * 	4)重写后的方法返回值类型与父类相同或者是其子类
		 * 	5)访问权限修饰符不能严于父类
		 * 
		 * 
		 */

	}

}

 * 重写的特点:
         *     1)在子类中重写
         *     2)方法名相同
         *     3)参数列表相同
         *     4)重写后的方法返回值类型与父类相同或者是其子类
         *     5)访问权限修饰符不能严于父类
        

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值