黑马程序员技术交流社区

标题: 多态 [打印本页]

作者: 张俊生    时间: 2013-6-13 19:18
标题: 多态
本帖最后由 风雨兼程 于 2013-6-14 08:56 编辑

建立子类对象后,想用父类的方法,不想让子类覆盖怎么办?
作者: 夏一站    时间: 2013-6-13 20:05
可以考虑使用静态static方法   

class   GrandPa   
  {   
          static   void   Method()   
          {   
                  System.out.println("Hello,   I   am   GrandPa!");   
          }   
  }   

class   Father   extends   GrandPa   
  {   
          static   void   Method()   
          {   
                  System.out.println("Hello,   I   am   Father!");   
          }   
  }   

class   Son   extends   Father   
  {   
          static   void   Method()   
          {   
                  GrandPa.Method();//   这样可以调用GrandPa的Method   
   
                  Father.Method();   
            
                  System.out.println("And   Son   is   followed!");   
          }   
  }
作者: 张俊生    时间: 2013-6-13 20:42
夏一站 发表于 2013-6-13 20:05
可以考虑使用静态static方法   

class   GrandPa   
  1. class   Fu   //父类对象
  2.   {   
  3.            void   Method()   
  4.           {   
  5.                   System.out.println("Fu    run!");   
  6.           }   
  7.   }   

  8. class   Zi  extends   Fu  //子类继承父类对象
  9.   {   
  10.           void   Method()   
  11.           {              
  12.                   System.out.println("Zi    run!");   
  13.           }   
  14.   }
  15. class   Demo
  16. {
  17.          public static  void main (String[]  args)
  18.         {
  19.              Fu   z  =   new  Zi();
  20.               z.Method();
  21.        }   

  22. }
  23. //运行结果是Zi  run!我的意思是在这之后又想用父类的方法。
复制代码

作者: 张超    时间: 2013-6-13 20:49
定义一个父类对象的变量指向子类         Father  f  = new son();
作者: 神之梦    时间: 2013-6-13 22:10
风雨兼程 发表于 2013-6-13 20:42

看题内容,让我相到了私有,但是楼楼这个回答。。。。。
我想说创建父类对象吧
作者: 苑永志    时间: 2013-6-13 22:26
本帖最后由 苑永志 于 2013-6-14 00:29 编辑

楼主的意思是这样的吧:子类Son的方法中想要调用父类Father的方法,但是Son中不能重写(Override)方法。
如:Son如果能够使用Father的方法m1(),则改方法不能用private修饰;同时Son不能继承方法m1(),加上final修饰符即可。如下代码所示:
  1. public class Son extends Father {
  2.         //编译报错,final方法不能被重写
  3.         /*@Override
  4.         public void m1(){
  5.                 System.out.println("m1");
  6.         }*/
  7.         
  8.         public void m2(){
  9.                 m1();
  10.         }
  11.         
  12. public static void main(String[] args) {
  13.                 new Son().m2();
  14.         }
  15. }
复制代码
  1. public class Father {        
  2.         //该方法不能用private修饰,否则子类中无法直接访问
  3.         final void m1(){
  4.                 System.out.println("m1");
  5.         }
  6. }
复制代码

作者: 知行    时间: 2013-6-13 22:28
那就用反射吧,前提是我知道父类有一个不带参数的构造函数
  1. package com.heima.duotai;

  2. public class Demo {

  3.         /**
  4.          * @param args
  5.          */
  6.         public static void main(String[] args) {

  7.         Fu   z  =   new  Zi();
  8.       Class<Fu> clazz =  (Class<Fu>) z.getClass().getSuperclass();
  9.       try {
  10.                 Fu f =(Fu)clazz.newInstance();
  11.                 f.Method();
  12.         } catch (Exception e) {
  13.                 // TODO Auto-generated catch block
  14.                 e.printStackTrace();
  15.         }  
  16.          z.Method();
  17.         }

  18. }
  19. class   Fu   //父类对象
  20. {   
  21.          void   Method()   
  22.         {   
  23.                 System.out.println("Fu    run!");   
  24.         }   
  25. }   

  26. class   Zi  extends   Fu  //子类继承父类对象
  27. {   
  28.         void   Method()   
  29.         {              
  30.                 System.out.println("Zi    run!");   
  31.         }   
  32. }
复制代码

作者: 袁梦希    时间: 2013-6-14 01:29
如果问题已经解决  请把帖子的类型改为已解决




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2