黑马程序员技术交流社区

标题: 关于继承还有多态的小问题 [打印本页]

作者: FFF    时间: 2013-9-26 22:36
标题: 关于继承还有多态的小问题
本帖最后由 FFF 于 2013-9-26 23:15 编辑
  1. class tempDemo
  2.         {
  3.                 public  void com()
  4.                 {        
  5.                         System.out.println("YES");
  6.                 }
  7.         }
  8. class tempDemoToo extends tempDemo//继承
  9.         {
  10.                 public void com()
  11.                 {
  12.                         System.out.println("No");
  13.                 }
  14.         }
  15. public class Temp09_26 {

  16.         public static void main(String[] args)
  17.         {
  18.                 tempDemo t = new tempDemoToo();//多态
  19.                 t.com();//调用方法
  20.         }
  21. }
复制代码
打印出来的是Yes;
我想要在有继承与多态的情况下,t.com()输出No,代码需要怎么改?
新人,请多多指教!


作者: 咕咕猫    时间: 2013-9-26 22:45
你的这个现在打印的就是no,因为子类会复写掉父类的com方法。你是应该想这样写的吧
class tempDemo

       {

          public  void com()

            {        

                      System.out.println("YES");

              }

     }

class tempDemoToo extends tempDemo

    {

           public void com_1()//子类特有方法

             {

                     System.out.println("No");

             }

    }

public class Temp
        {



       public static void main(String[] args)

      {

               tempDemo t = new tempDemoToo();//父类型创建子对象
                           tempDemoToo d=(tempDemoToo)t;//向下转型才能调用子类特有方法

             p.com_1();

        }

}
作者: 暮雨    时间: 2013-9-26 23:15
  1.     class tempDemo
  2.             {
  3.                     public  void com()
  4.                     {      
  5.                             System.out.println("YES");
  6.                     }
  7.             }
  8.     class tempDemoToo extends tempDemo
  9.             {
  10.                     public void com()
  11.                     {
  12.                             System.out.println("No");
  13.                     }
  14.             }
  15.     public class Test1 {

  16.             public static void main(String[] args)
  17.             {
  18.                     tempDemo t = new tempDemoToo();
  19.                     t.com();
  20.             }
  21.     }
复制代码
运行了一下,结果输出为No,符合预期。多态实现三个要素
1.有继承 2.有方法的重写 3.父类引用指向子类对象
你的程序满足多态的条件。
在tempDemoToo 中重写了父类中的com()方法,在使用引用时,父类的引用是指向子类对象的,故在调用的时候调用的是重写后的子类的com()方法。




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