继承
- 概念:继承是类与类的一种关系,是一种"is a"的关系,在Java中继承都是单继承。
- 优点:
- 子类拥有父类的属性和方法,
- 实现代码的复用。
方法的重写
- 概念:当子类继承父类的方法时,可以重写父类的方法,当调用时会优先调用子类的方法。
- 语法规则:
- 返回值类型相同;
- 方法名相同;
- 参数类型及个数相同。
重写和重构的区别:
方法 | 重写 | 重构 |
使用范围 | 继承关系的父类和子类 | 同一个类下 |
返回值类型 | 相同 | 可以不相同 |
方法名 | 相同 | 相同 |
参数类型 | 相同 | 相同 |
参数个数 | 相同 | 不同 |
- 继承的初始化顺序
- 先初始化父类,再初始化子类;
- 先执行初始化对象的属性,再执行构造方法。
package com.java.test
public class Parents{
public String name = "Tom";
public Parents(){
name = "Jary";
System.out.println("Parents构造方法");
}
}
package com.java.test
public class Students extends Parents{
public Students(){
System.out.println("Students构造方法");
}
}
package com.java.test
public class HelloWorld {
public static void main(String arg[]){
Students s = new Students();
System.out.println("The student's name is " + s.name);
}
}
final关键字
- 概念:使用final关键字做标识,有“最终”的意思,意味着被修饰的事件不可更改。
- 范围:
- 修饰类:被修饰的类不可被继承;
- 修饰方法:该方法不能被重写;
- 修饰属性:该属性不会被系统自动初始化;
- 修饰变量:被修饰的变量的值不能更改,所以也可称被final修饰的变量为常量。
super关键字
- 概念:在对象的内部使用,用来表示对象的父类。例如:访问父类的属性
super.value
,访问父类的方法super.function()
。 - 应用:
- 子类的构造方法中必然会调用父类的构造方法,若子类没有用
super()
调用父类的构造方法,系统会自动调用父类的无参的构造方法,若此时父类没有定义无参的构造方法,那么编译会报错; - 子类如果显式的调用父类的构造方法,那么必须放在该方法的第一行。
例:
public Students(){
super();
}
Object类
- Object类是所有类的父类,在没有明确声明继承某一个类的时候,该类默认继承Object类。Object类中的方法适用于所有类。
- toString()方法
在Object类中,定义toString()方法返回对象的HashCode(对象地址字符串)。如果想要直接输出对象的属性,可以重写toString()方法,以达到输出对象属性的要求。 - equals()方法
equals()比较两个对象是否相等,这里的相等是判断是否指向同一个内存地址。用户创建的对象并不是指对象本身,而是对象所存在的内存地址,所以Object类中的equals()方法本质上是比较对象所在的地址是否相同。
但在实际使用中,用户判断两个对象是否相等,是判断对象的属性是否相等,所以我们就需要重写equals()方法,使其判断对象的属性是否相等。
例:
@Override
public boolean equals(Object obj) {
//比较两个类引用的地址是否相同,若相同则判定两个对象相等
if (this == obj)
return true;
//若要比较的对象为空,则直接判定两个对象不相等
if (obj == null)
return false;
//判断两个类对象是否相等
if (getClass() != obj.getClass())
return false;
//若两个对象的类型不同先将其转换为统一类型,在比较两个类的属性值是否相同
Students other = (Students) obj;
if (age != other.age)
return false;
return true;
}
注:
- 类对象(obj.getClass()):指的是类的属性,例如name,age,num等成员变量;
- 类的对象(obj):用户创建的对象,指的是对象属性的值。