A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张俊生 高级黑马   /  2013-6-13 19:18  /  1322 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 风雨兼程 于 2013-6-14 08:56 编辑

建立子类对象后,想用父类的方法,不想让子类覆盖怎么办?

8 个回复

倒序浏览
可以考虑使用静态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!");   
          }   
  }

评分

参与人数 1技术分 +1 收起 理由
曹睿翔 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
夏一站 发表于 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!我的意思是在这之后又想用父类的方法。
复制代码
回复 使用道具 举报 1 0
定义一个父类对象的变量指向子类         Father  f  = new son();
回复 使用道具 举报

看题内容,让我相到了私有,但是楼楼这个回答。。。。。
我想说创建父类对象吧
回复 使用道具 举报
本帖最后由 苑永志 于 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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
曹睿翔 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
知行 中级黑马 2013-6-13 22:28:48
7#
那就用反射吧,前提是我知道父类有一个不带参数的构造函数
  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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
曹睿翔 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
如果问题已经解决  请把帖子的类型改为已解决
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马