1.向上转型
这是Java中的一种调用方式,是对A的对象的方法的扩充,即A的对象可访问B从A中继承来的和B“重写”A的方法。简而言之,可以理解为将子类类型对象转换为父类类型的对象。
例如:
public class project{
public static void main(String[] args) {
people tom=new teacher();
}
}
class people{}
class teacher extends people{}
在这段伪代码中,就运用了向上转型的语法
people tom=new teacher();
综上所述,将一个具体的子类的对象转换为一个较为抽象的父类的对象是安全的。例如,可以说平行四边形是四边形,但不能说四边形是平行四边形。但值得注意的是,父类的对象无法调用子类独特的属性或方法。
2.向下转型
可以类比于向上转型,可以把向下转型简而言之的理解为将父类类型的对象转换为子类类型的对象。但为避免报错,应该避免把抽象类对象转换为一个具体的类的对象。
例如,这段伪代码就是错误的,因为直接把父类对象赋值给子类对象了
public class project {
public static void main(String[] args) {
Bird bird=new Pigeon();
Pigeon pigeon=bird;
}
}
class Bird{}
class Pigeon extends Bird{}
那么如何修改呢,那么就需要用到强制转型,语法规则如下:
子类类型 子类对象=(子类类型)父类对象;
那么在对于该例,应将代码修改为:
Pigeon pigeon=(Pigeon)bird;
3.instanceof关键字
向下转型时为了避免2中的错误,需要使用一个关键字判断父类的对象是否为子类对象的实例,这个关键字就是instanceof,具体使用语法如下:
myobject instanceof ExampleClass
myobject:某类的对象引用
ExampleClass:某个类
使用结果:true---是实例对象
false--不是实例对象
4.final关键字
1)final关键字
主要用于变量声明
例如下面这段代码就定义了关键字PI,用以计算圆的周长和面积:
package project;
import java.util.Scanner;
public class iproject {
static final double PI=3.1415926;
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
double r=sc.nextDouble();
sc.close();
double s,c;
s=PI*r*r;
c=2*PI*r;
System.out.println(s);
System.out.println(c);
}
}
2)final方法
将方法定义为final类,可以防止子类修改父类的定义。同时,也可以是程序执行效率远高于非final类的方法
3)final类
final类不能被继承。用法如下:
final 类名{}
例如,Math类和String类就不能被当成任何类的父类,例如以下这段伪代码就是错误的:
class math extends java.lang.Math{}
class string extends java.lang.String{}