栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

学习java的第十九天。。。(方法重写、Object类)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

学习java的第十九天。。。(方法重写、Object类)

方法重写

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

就像之前写的代码:

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.getLove() + " "
				+ this.getHealth());
	}
}
//Dog
public class Dog extends Pet {
	//strain属性是Dog类里独有的属性,其他类没有,所以要在Dog类里定义
	
	private String strain;
	
	public Dog(){
	}

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

	public String getStrain() {
		return strain;
	}

	public void setStrain(String strain) {
		this.strain = strain;
	}
	
}
//测试类
        Dog dog1=new Dog("大黄", 66, 66, "柯基");
		//在dog类中没有setName方法,但是Dog类对象dog1是可以调用,因为Dog类继承了pet类
		dog1.setName("小黄");
		dog1.print();

 

这里只能输出父类Pet的print()的方法, 并不能把Dog类中的strain属性输出,所以需要使用到方法重写

 为什么要使用方法重写

父类的方法无法满足子类的需求,就需要使用到方法重写

什么是方法重写

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

//父类Pet
public class Pet {
	private String name;
	private int health;
	private int love;

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

	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.print("昵称:"+this.getName() + " 亲密度:" + this.getLove() + " 健康值"
				+ this.getHealth());
	}
}
//Dog类
public class Dog extends Pet {
	//strain属性是Dog类里独有的属性,其他类没有,所以要在Dog类里定义
	
	private String strain;
	
	public Dog(){
	}

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

	public String getStrain() {
		return strain;
	}

	public void setStrain(String strain) {
		this.strain = strain;
	}
	@Override
	public void print() {
		super.print();
		System.out.println(" 品种:"+this.getStrain());
	}
}
//penguin类
public class Penguin extends Pet {
	//定义Penguin类里独有的属性
	
	private String sex;
	
	public Penguin(){
		super();//这个地方表示调用父类的无参构造方法
	}

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

	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}
	public void print() {
		super.print();
		System.out.println(" 性别:"+this.getSex());
	}
}
//测试类
        Dog dog = new Dog("旺旺", 5, 8, "恶霸犬");
		dog.print();
		
		Penguin penguin = new Penguin("QQ", 0, 1, "雄");
		penguin.print();

 输出结果

方法重写的规则

需要是该类的子类
方法名相同
参数列表相同
返回值类型相同或者是其子类
访问权限不能严于父类

方法重写与方法重载
位置方法名参数表返回值访问权限修饰符
方法重写子类相同相同相同或者是子类不能比父类更严格
方法重载同类相同不同无关无关
Object类

Object类是所有类的父类

Object被子类经常重写的方法
toString()返回当前对象本身的有关信息
equals()比较两个对象是否是同一个对象,是则返回true
hashCode()返回改对象的哈希代码值
getClass()获取当前对象所属的类信息,返回Class对象
toString对象的重写

若不重写toString,输出的则是:包名.类名.@.hash码值,是地址;若重写之后则输出对象本身的值。

public static void main(String[] args) {
		//创建学生类对象
		Student stu = new Student("马力", 66);
		System.out.println(stu);//cn.bdqn.demo02.Student@40671416
		String str=stu.toString();//按住ctrl点击toString可以查看
		System.out.println(str);//cn.bdqn.demo02.Student@40671416
		System.out.println(stu.getClass().getName()+'@'+Integer.toHexString(stu.hashCode()));//cn.bdqn.demo02.Student@40671416
	}

 可以按住ctrl,点击toString

    @Override
	public String toString() {
		return "姓名:"+this.getName()+",年龄:"+this.getAge(); 
	}

 重写之后输出的代码是

 还可以右击鼠标,——>Source——>Generate toString

 

 这里可以选择在toString中重写哪些方法

equals()方法

为什么要重写equals()方法:

 object类中的equals()方法比较是的两个对象的地址值,不能满足子类的需求

   “==”表示比较两个基本数据类型,“equals”表示比较两个对象。若不引入object类的equals方法,则输出为对象的地址,而引入以后则输出对象的值。

public static void main(String[] args) {
		Dog dog3 = new Dog("马力", 78, 56);
		System.out.println(dog3);
		System.out.println(dog3.toString());
		
		Dog dog2 = new Dog("马力", 78, 56);
		
		
		boolean result = dog2.equals(dog3);
		System.out.println(result);//false
		
		System.out.println(dog3);
		System.out.println(dog2);
		
		String str1 = new String("dsad");
		String str2 = new String("dsad");
		System.out.println(str1.equals(str2));
	}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1035136.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号