//基类:
public class Polymorphism {
public int book=6;
public void base(){
System.out.println("父类的普通方法");
}
public void test(){
System.out.println("父类的被覆盖的方法");
}
}
//子类
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class SubClass extends Polymorphism {
public String book="子类的book";
@Override
public void test() {
System.out.println("子类的覆盖父类的方法");
}
public void sub(){
System.out.println("子类特有的独特方法");
}
public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException {
Polymorphism bs=new Polymorphism();
System.out.println(bs.book);
bs.base();
bs.test();
SubClass sc=new SubClass();
//通过引用变量来访问其包含的实例属性时,系统总是试图访问它编译时类所定义的属性,而不是它运行时类所定义的属性
System.out.println(sc.book);
sc.test();
sc.base();
sc.sub();
Polymorphism py=new SubClass();
System.out.println(py.book);
py.base();
py.test();
//利用向下转型可以访问子类特有方法
SubClass ss=(SubClass)py;
ss.sub();
//利用反射也可以
Method[] cla=py.getClass().getMethods();
int i=1;
for(Method mth:cla){
System.out.println(i+":");
System.out.println(mth.toString()+":"+mth.getName());//省略
if(mth.getName()=="sub"){
System.out.println("*********");
mth.invoke(py, null);//执行子类特有的方法体
break;
}
i++;
}
}
}
Java多态(利用向上向下转型和反射机理)
最新推荐文章于 2022-07-26 00:20:58 发布