JAVA 中的 多态 和 类型验证关键字(instanceof)

it2026-10-04  2

1.多态

1.父类对象可以包含子类对象,意思就是说,父类向下兼容,父类的对象可以容纳子类对象,虽然实际上还是子类对象 2.多态大多使用在方法形参处,可以直接使用父类的形参接收所有子类的实参,大大减少代码量 子类 子类的对象 = new 子类构造方法(); 父类 父类的对象 = 子类的对象;(子类的对象转换为父类对象) 父类 父类的对象 = 子类的对象 = new 子类构造方法(); 父类 父类的对象 = new 子类构造方法(); 父类对象实际上是子类的对象(相当于套个壳) 这里的父类和子类的关系就像是 int类型 和 byte类型,父类是int类型,子类是byte类型 3.小类型向大类型可以随意转换 4.大类型向小类型转换需要谨慎 5.由于不同的子类之间会有不的独有方法 所以要先将 套了父类壳子的子类 转换回原本的子类再使用

2.例

父类

public class 父类 { public void show(){} }

子类1

public class 子类1 extends 父类 { public void show(){ System.out.println("这里是子类1的show()"); } public void 子类1test(){ System.out.println("这是子类1的独有方法"); } }

子类2

public class 子类2 extends 父类 { public void show(){ System.out.println("这里是子类2的show()"); } public void 子类2test(){ System.out.println("这是子类2的独有方法"); } }

main

public class main { public static void main(String[] args) { 子类1 子类1对象 = new 子类1(); 子类2 子类2对象 = new 子类2(); //尝试用父类接收子类对象 父类 父类对象 = 子类2对象; show(子类1对象); show(父类对象); //检查这个父类对象究竟是什么 父类对象.show(); } public static void show(子类1 子类1形参){ 子类1形参.show(); } public static void show(父类 父类形参){ 父类形参.show(); } }

运行结果

这里是子类1的show() 这里是子类2的show() 这里是子类2的show()

由于父类并不包含子类的所有方法,所以想要使用子类中独有的方法需要将其转换回对应的子类,如果转换为错误的子类会无法运行

mian

使用 instanceof 来验证父类对象的里面究竟是什么 instanceof左边放父类对象,右边放子类,父类对象中的实际对象和子类匹配则返回true public class main { public static void main(String[] args) { 子类1 子类1对象 = new 子类1(); 父类 父类对象 = 子类1对象; show(父类对象); //方法要求接收父类,子类继承了父类,属于父类下级,所以父类参数也可以兼容接收子类 show(子类1对象); } public static void show(父类 父类对象){ //判断父类对象的实质是不是子类1 if (父类对象 instanceof 子类1){ //将父类对象转换回子类1 子类1 子类1 = (子类1)父类对象; //能够调用子类1方法 子类1.子类1test(); }else { System.out.println("父类对象的实际内容不是子类1"); } } }

输出结果

这是子类1的独有方法 这是子类1的独有方法

最新回复(0)