java--19/11/34

大纲

  • 方法的重写(override)
  • Object类(非常重要)
  • toString()方法
  • ==和equals方法

学习笔记

方法的重写(override)

:子类通过重写父类的方法,可以用自身的行为替换父亲的行为
方法重写需要符合下面三个要点:

  • “==”:方法名,形参列表相同
  • “<=”:返回值类型和声明异常类型,子类小鱼父类。
  • “>=”:访问权限,子类大于父类
toString方法

Object类中定义有public String toString()方法,其返回值是String类型。Object类型中toString方法的源码可以在eclipse中查看

==和equals方法

“==”代表比较双方是否相同。如果是基本类型则表示值相等,若果是引用类型则表示地址相等即是否是同一个对象。
Object类中定义有:public boolean equals(Object obj)方法,提供定义“对象内容相等”的逻辑。比如…
Object的equals方法默认就是比较两个对象的hashcode,是同一个对象的引用时返回true柔则返回false。但是,我们可以根据我们自己的要求重写equals方法。


代码

package com.L.oo2;
/**

  • 了解Object类
  • @author L

*/
public class TestObject {
public static void main(String[] args) {
Object obj;
TestObject to = new TestObject();
System.out.println(to.toString());//能直接用toString方法,说明TestObject类继承于Object类
Person2 p2 = new Person2(“毛毛”,8);//不手动写构造器会报错
System.out.println(p2.toString());
}
public String toString() {
return “测试对Object类中toString方法的重写”;
}

}
class Person2{
String name;
int age;
@Override
public String toString() {
return name+",年龄:"+age;
}
public Person2(String name,int age) {
this.name = name;
this.age = age;
}
}


package com.L.oo2;
/**

  • 测试重写(覆盖)
  • @author L

*/
public class TestOverride {
public static void main(String[] args) {
Horse h = new Horse();
h.run();
}

}

class Vehicle{
public void run() {
System.out.println(“跑…”);
}
public void stop() {
System.out.println(“停止”);
}
/public Man jj() {
return new Man();
}
///man不是一个类型,所以下面的Person的特殊之处在哪?
//是不是同一个包中的.java的类是共用的,而且 自己定义的类可以做作为一种类型
/public Student Girl() {
return new Student();
}
/ //果然没有报错,上述猜想正确
public Person WhoIsPsg() {
return new Person();
}
}

class Horse extends Vehicle{
public void run(){
System.out.println(“四蹄翻飞,咯噔咯噔…”);//方法名和参数列表和父类中的同名方法一致
}
/public Person WhoIsPsg() {//Person是一种类型,返回值类型的那种类型,为什么?
return new Person();
}
/
public Student WhoIsPsg() {//在子类中,对父类中的方法进行重写,方法的类型必须<=父类中定义该方法的类型(是该类型或者是其子类)
return new Student();
}
/public Object WhoIsPsg() {
return new Object();
}
/ //报错 ,印证了上一句注释
}


package com.L.oo2;
/**

  • 对equals方法的重写
  • @author L

*/
public class TestEquals {
public static void main(String[] args) {
Object obj;
String str;

	User u1 = new User(1000,"毛毛","12346546");
	User u2 = new User(1000,"虫虫","12346546");
	System.out.println(u1==u2);//在这里测试的是两个地址是否指向同一个对象
	System.out.println(u1.equals(u2));//测试两个地址所指向的对象的内容是否相同
}

}
class User{
int id;
String name;
String pwd;

public User(int id, String name, String pwd) {
	super();
	this.id = id;
	this.name = name;
	this.pwd = pwd;
}

/* @Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + id;
return result;
}*/ //加不加无所谓 所以他是干嘛用的?

@Override
public boolean equals(Object obj) {//重写之后上面调用equals方法对比u1和u2时,返回值true
	if (this == obj)
		return true;
	if (obj == null)
		return false;
	if (getClass() != obj.getClass())//如果两个值的类型不同,直接返回false
		return false;
	User other = (User) obj;
	if (id != other.id)
		return false;
	return true;
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值