今日重点:Object,object的方法,多态
一.Object
java.lang.Object类是所有Java类的祖先类,如果在类的声明中未使用extends关键字指明其父类,则默认继承Object类。Object类中定义了一些JAVA所有的类都必须具有的一些方法.
比如:object里面有构造器方法,所有的类都继承自object,所以所有类都会提供一个无参构造方法.
二.native关键字
被native关键字修饰的方法指的是该方法的实现由非java语言实现.被native修饰的方法在本地方法接口
三.equals
Object中 的 equals 方法默认实现就是比较两个对象的地址,是同一个对象的引用时返回 true 否则返回 false。
但是equals方法是用于比较当前对象和方法参数传入的对象是否"相等"的方法。
那就需要重写equals方法,equals方法继承自object类
package com.bjsxt.pojo4;
import java.util.Objects;
public class User {
private String name="zhangsan";
private String age="23";
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
User user = (User) o;
return Objects.equals(name, user.name) && Objects.equals(age, user.age);
}
}
package com.bjsxt.pojo4;
public class Test01 {
public static void main(String[] args) {
User user1=new User();
User user2=new User();
System.out.println(user1.hashCode());
System.out.println(user2.hashCode());
System.out.println(user1.equals(user2));
}
}
四.hashcode
此方法用于返回当前对象的哈希码值。 哈希码:hash码,散列码,是一种无序不重复的一串十六进制数据,Object类中定义的方法作用就是为每一个对象生成一个独立的哈希码,用以区分每个对象,我们可以通过重写的方式自定义哈希码的实现规则,让其和属性值相关联。
package com.bjsxt.pojo4;
import java.util.Objects;
public class User {
private String name="zhangsan";
private String age="23";
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
User user = (User) o;
return Objects.equals(name, user.name) && Objects.equals(age, user.age);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
package com.bjsxt.pojo4;
public class Test01 {
public static void main(String[] args) {
User user1=new User();
User user2=new User();
System.out.println(user1.hashCode());
System.out.println(user2.hashCode());
System.out.println(user1.equals(user2));
}
}
五.重写toString()
这样返回的是地址,我想返回的是属性的值
六.类,接口之间关系
七.多态
多态指的是同一个方法调用,由于对象不同可能会有不同的行为。
- 多态是方法的多态,不是属性的多态(多态与属性无关)。
- 多态的存在要有3个必要条件:继承或实现,方法重写,父类引用指向子类对象。
- 父类引用指向子类对象后,基于父类引用调用方法,子类重写的方法运行,此时多态就出现了。
- 使用父类做方法的形参和返回值,也是多态的使用方式。即使增加了新的子类,方法也无需改变,符合 开闭原则。 父类引用做方法的形参,实参可以是任意的子类对象,可以通过不同的子类对象实现不同的
行为方式。另外即使增加了新的子类,方法也无需改变,提高了扩展性,符合开闭原则。