-
方法重写的作用和使用
方法重写:子类继承了父类的方法后,如果发现在需求下,父类的某些方法不太强大,我们就可以在子类中进行重写。/**
* 宠物自白
*/
@Override // 注解不报错 说明你写的就是方法重写 (规范:必须要加)
public void showMyself() {
super.showMyself();
System.out.println(“我的品种:”+breed);
}【方法重写和方法重载的区别:(面试题)】
方法重写特点:
在继承中的子类中,子类继承了父类的方法后,方法名相同,参数列表也相同。
方法的返回值类型不能大于父类(学了多态就理解了)。
方法的访问修饰符不能严于父类。 (父类是默认的 你写了私有的。)
了解:不能比父类抛出更多的和更大的异常。(学了异常之后就懂了)
方法重载特点:
在同一个类中,方法名相同,参数列表不同(类型、个数、顺序不同…),这种情况就是方法重载。与方法的返回值类型和访问修饰符无关。
留的疑问:为什么在父类中方法不强大,子类又写一遍,还不能把父类中的删掉?美其名曰方法重写?
和多态有关。 -
深入理解继承并了解Object类
Object:是Java中最顶级的类。超类(super class)
任何类都直接或者间接继承自Object。
Ctrl+T:查看继承体系
Ctrl+Shift+T:搜索类
Ctrl+O:查看本类中的所有属性和方法
Object它有很多方法,只要是定义一个类,这些方法都可以被定义的类所继承过去。
toString(); // 转换为字符串public String toString() { // 默认输出当前对象的伪地址值
return getClass().getName() + “@” + Integer.toHexString(hashCode());
}
equals(); // 判断相等
public boolean equals(Object obj) {
// 默认是用 == 来进行比较的
return (this == obj);
}
hashCode(); // 获取哈希值
getClass(); // 获取字节码对象
这些方法在Object中都有基本的实现内容,但是我们的需求一直多变,所以Object中的方法,不太适合,那么就可以进行方法重写。
例如:String类就默认进行了重写equals()方法。
【== 和equals的区别?(面试题)】
== 如果比较基本数据类型,比较的是值内容。
而如果比较引用数据类型,比较的是内存地址。
equals方法,默认情况下(Object)和==是一样的。
但是在String中重写了equals之后就可以进行比较内容了。
String:字符串 它本质上就是一个字符数组。
下方是字符串重写的equals方法:
例如调用:
String name = "xxx";
String name1 = "xxx";
name.equals(name1);
public boolean equals(Object anObject) {
// 比较内存地址 如果地址值相同 说明是同一个 那么直接返回true
if (this == anObject) {
return true;
}
// 判断anObject 是不是字符串类型的 如果不是没法比 直接结束
if (anObject instanceof String) {
// 如果anObject是一个字符串类型 那么首先向下类型转换为String
String anotherString = (String)anObject;
// 获取this它的value数组(字符数组)的长度
int n = value.length;
// 判断是否字符串的长度一致 如果不一致 直接结束
if (n == anotherString.value.length) {
// 比较字符是否完全一致
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
// 只要其中发现不一样的字符 立马结束
if (v1[i] != v2[i])
return false;
i++;
}
// 如果一切正常 返回true
return true;
}
}
return false;
}
// Alt+Shift+S h 生成重写后的hashCode和equals方法。
-
理解如何重写equals()方法
@Override@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Student other = (Student) obj;
if (age != other.age)
return false;
if (id != other.id)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
} -
多态的作用和使用
面向对象三大特性:多态 -
掌握instanceof关键词
instance:实例
instanceof:…的实例
可以判断是否属于某个类型的实例 -
掌握向上和向下转型自动类型转换和强制类型转换。
自动类型转换和强制类型转换。自动类型转换和强制类型转换。