想象一下,有一个相亲想爱的一家人家族树。在这个家族树中,有一个祖先(父类),它拥有一些基本的特征和行为,比如家族的传统、姓氏、某些共同的技能或知识。
现在,这个祖先有多个后代(子类),每个后代都继承了祖先的基本特征和行为,就像孩子们继承了父母的姓氏和一些遗传特征。但是,每个后代也可以有自己的独特特征和行为,就像每个孩子都有自己的个性和特长。
而在java中,就叫做类的继承。
class Child extends Parent{}
下面我们来创建子类对象来观察构造方法的执行顺序
运行结果如下
Object类
用户在创建一个类时,除非已经指定它从其他类继承,否则它就是从java.lang.Object类继承而来的
如String类、Integer类等都是继承自Object类
除此之外,自定义的类也是继承自Object类的
getClass()方法
该方法用于取得类的名字
getClass().getname();
toString方法
将一个对象返回为字符串形式,会放回一个String实例
可以将getClass()方法和toString()方法联合使用
equal()方法
用于比较两个对象的实际内容
以下用根据身份证号判断是否为同一人来展示equal()和"=="的区别
以下为运行结果
从这个结果我们可以看出,虽然"tom"和"汤姆"名字不同,但是身份证是相同的,因此,equals()方法判断这两个对象实际时同一个,但"=="运算符无法做出有效的判断.
对象类型的转换
向上转型
不过在向上转型中,父类的对象无法调用子类独有的属性或者方法
向下转型
注意:
1)两个没有继承关系的对象不可以进行向上转型或向下转型
2)父类对象可以强制转换为子类对象,但有一个前提:这个父类对象要先引用这个子类对象
instanceof关键字
myobject instanceof ExampleClass
myobject:某类的对象引用
ExampleClass:某个类
使用instanceof关键字的表达式返回值为布尔值
如果返回true则说明myobject对象为ExampleClass的实例对象
方法的重载
方法的重载就是在同一个类中允许存在一个以上的同名方法,只要这些方法的参数个数或类型不同即可.
final关键字
凡是被final关键字修饰的内容都是不可改变的
final double PI = 3.14;
如果在程序里再次对该常量进行赋值,编译器将不会接受
final方法
将方法定义为final类型,可以防止子类修改父类的定义与实现方法,同时定义为final的方法执行效率要高于非final方法。
private final void test(){
...
}
final类
定义为final的类不能被继承
final 类名{}
record类
在上文中,都是使用class关键字定义类的,下面讲解另一种用于定义类的关键字:record
public record Clock(int hours,int minutesperhour){
public int getHours(){
return this.hours;
}
}
public int getMinutesperhour(){
return this.minutesperhour;
}
}