Java多态(利用向上向下转型和反射机理)

本文介绍了一个Java程序示例,展示了多态性和反射的基本用法。通过父类和子类的关系,说明了多态性如何工作,并演示了如何使用反射调用子类特有的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    //基类:  
    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++;   
            }
 }
} 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值