父类
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的独有方法
