定义一个抽象类,然后定义两个具体的子类,用两个子类的实例化对象当作参数传入po方法内部
po方法的参数是父类参数,这样就可以接收不同子类的参数了,这就多态的性质。
调用的时候可能会需要调用到父类中没有定义的抽象方法,所以就需要转换类型,用父类的转换成子类的。
但是转换的时候又有可能传进来的对象不是我们要装换的类的,比如我们需要转换mun类但是传进来的对象却是func的,这样就会报错,所以我们需要用 instanceof关键字来进行判断传进来的对象是不是mun类的,如果是那么就转换并调用
public class isdj {
public static void main(String[]args) {
func k = new func("bbor"); //实例化具体类
mun p = new mun ("bgrl");
po(k); //为po方法传参
po(p);
}
public static void po(foo c) { //用父类参数来接收参数,这样可以接收不同子类的参数,这就是多态
c.ko(); //用参数名调用子类方法
//调用父类foo中不存在的而子类中又有的方法,需要类型转换
if(c instanceof mun) { //判断传进来的是不是mun类的东西
mun p = (mun)c; //如果是的话就转变类型
p.dd(); //调用 p 对象中的dd方法
}
}
}
abstract class foo{ //定义一个抽象类用来被继承
String name;
public foo() {}
public foo(String name) {
this.name=name;
}
public abstract void ko();
}
class func extends foo{ //定义一个具体类来继承抽象类
public func(String name) {
super(name);
}
public void ko() {
System.out.println("我是狗币"+name);
}
}
class mun extends foo{ //定义一个具体类来继承抽象类
public mun(String name) {
super(name);
}
public void ko() {
System.out.println("我才是狗币"+name);
}
public void dd() {
System.out.println("我才是"+name);
}
}



