类的继承
继承本身
一个类要继承另一个类需要使用关键字extends
关键字extends的使用
class a extend b{}
由于java只支持单继承,所以同时继承多个父类是错误的
在创造子类对象时,会先执行父类的构造方法,再执行子类的构造方法
举例说明
package nb;
class a{
public a(){
System.out.printf("这是父类方法");
}
}
class b extends a{
public b(){
System.out.printf("这是子类方法");
}
}
public class ex {
public static void main(String[] args) {
new b();
}
}
object类
object是所有类的父类,在object类中,主要包括clone(),finalize(),equals(),toString()
最常用的两个方法是equals(),toString()
getClass方法
getClass()是object类定义的方法,他会返回对象执行时的Class实例,使用此实例调用getMame()方法可以取得类的名称
toString方法
toString方法功能是将一个对象返回成字符串的形式,他会返回一个String实例.当类转换为字符串与字符串连接时会自动调用重写的toString方法
equals()方法
在java中有两种比较相等的方式,分别是==和equals()方法
两者具有区别==比较的是两者的内存,equals比较的是两个对象的具体内容
对象类型的转换
举一个例子
package nb;
class People{}
class Teacher extends People{}
public class tom {
public static void main(String[] args) {
People tom = new Teacher();
这里有一个人 名字叫tom 他是一名老师
Teacher teacher = (Teacher) tom;
这个人(tom) 是一个老师
}
}
如果Teacher teacher = tom;这句话输入的话计算机会报错
因为老师是人,人不一定是老师
People tom = new Teacher();可以由老师向上转型,但是不能向下转型
instanceof关键字
判断一个类是否实现了接口,判断一个实例对象是否属于一个类
写一个小案例
package nb;
class Aa {}
class Bb extends Aa{}
class Cc{}
public class instance_ {
public static void main(String[] args) {
Aa aa = new Aa();
Bb bb = new Bb();
System.out.println(aa instanceof Bb);
System.out.println(bb instanceof Aa);
}
}
b继承a,a 不属于 b,所以返回false
b属于a,返回true 如果遇到别的教程值相反属于书籍谬误,需要编写程序验证
方法的重载
构造方法只有一个名字,希望以不同的方式实例化对象,需要使用多个构造方法来完成
这些构造方法根据类名命名,方法名相同形参不同的方法叫做重载
final
final变量
final double PI =3.14
使用final设置变量后变量不可变,
final方法
将方法定义为final类型,可以防止子类修改父类的定义和实现方式
final的方法执行效率高于非final方法
final类
定义为final的类不能被继承,该类中所有的方法都被隐式的设置成final方法,但是final类中的成员变量可以被定位成
final和非final形式
record类
record是final声明的简化
public final class a == public record class
该类中所有的方法都被隐式的设置成final方法,但是final类中的成员变量可以被定位成
final和非final形式
record类
record是final声明的简化
public final class a == public record class