Day12 JavaSE

43 阅读3分钟

今日重点:Object,object的方法,多态

一.Object

java.lang.Object类是所有Java类的祖先类,如果在类的声明中未使用extends关键字指明其父类,则默认继承Object类。Object类中定义了一些JAVA所有的类都必须具有的一些方法. image.png 比如:object里面有构造器方法,所有的类都继承自object,所以所有类都会提供一个无参构造方法.

二.native关键字

被native关键字修饰的方法指的是该方法的实现由非java语言实现.被native修饰的方法在本地方法接口

三.equals

Object中 的 equals 方法默认实现就是比较两个对象的地址,是同一个对象的引用时返回 true 否则返回 false。 image.png image.png 但是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));   
  
}  
}

image.png image.png

四.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));    
}  
}

image.png

五.重写toString()

image.png 这样返回的是地址,我想返回的是属性的值 image.png image.png

六.类,接口之间关系

image.png

七.多态

多态指的是同一个方法调用,由于对象不同可能会有不同的行为。

  1. 多态是方法的多态,不是属性的多态(多态与属性无关)。
  2. 多态的存在要有3个必要条件:继承或实现,方法重写,父类引用指向子类对象。
  3. 父类引用指向子类对象后,基于父类引用调用方法,子类重写的方法运行,此时多态就出现了。
  4. 使用父类做方法的形参和返回值,也是多态的使用方式。即使增加了新的子类,方法也无需改变,符合 开闭原则。 父类引用做方法的形参,实参可以是任意的子类对象,可以通过不同的子类对象实现不同的

行为方式。另外即使增加了新的子类,方法也无需改变,提高了扩展性,符合开闭原则。