黑马程序员技术交流社区

标题: 接口问题,指教优化? [打印本页]

作者: Blüe-wǒlf    时间: 2014-5-14 16:45
标题: 接口问题,指教优化?
[c
  1. abstract class Student//定义最开始的基础类
  2. {
  3.         public  abstract void study();//每个学员都必须要学习,但是学习方法不一样,模糊式所以选择abstract
  4.                 void sleep()//每个学员都必须要睡觉
  5.         {
  6.         System.out.println("爱睡觉");
  7.         }
  8. }
  9. interface Smoking//部分学员需要
  10. {
  11.         public  void smoke();
  12.        
  13. }
  14. class  Li extends Student implements Smoking//李继承学员基本类,并同时具备抽烟功能。
  15. {
  16.         public  void study(){System.out.println("学习方法1");}
  17.        
  18.         void sleep(){};
  19.         public  void smoke()
  20.         {
  21.         System.out.println("抽烟");
  22.         }
  23. }
  24. class InterfaceDemo2
  25. {
  26.         public static void main(String []  args)
  27.         {
  28.                 //下面是通过新建对象把Li中的数据打印出来。有其他简单方法(java视频才学到第七天)打印出Li中的内容吗?要在哪里修改
  29.         Li x=new Li();
  30.         x.study();
  31.         x.smoke();
  32.         }
  33. }
复制代码



作者: Shimano    时间: 2014-5-14 20:47
本帖最后由 Shimano 于 2014-5-14 20:51 编辑
  1. abstract class Student//定义最开始的基础类
  2. {
  3.     public  abstract void study();//每个学员都必须要学习,但是学习方法不一样,模糊式所以选择abstract
  4.     public void sleep()//每个学员都必须要睡觉
  5.     {
  6.                 System.out.println("爱睡觉");
  7.     }
  8. }
  9. interface Smoking//部分学员需要
  10. {
  11.     public void smoke();   
  12. }
  13. class  Li extends Student implements Smoking//李继承学员基本类,并同时具备抽烟功能。
  14. {
  15.     public void study()
  16.         {
  17.                 System.out.println("学习方法1");
  18.         }
  19.         
  20.     public void sleep()
  21.         {
  22.                 System.out.println("爱趴桌子上睡觉!");
  23.         }
  24.     public void smoke()
  25.     {
  26.         System.out.println("抽烟");
  27.     }
  28. }
  29. class InterfaceDemo2
  30. {
  31.     public static void main(String []  args)
  32.     {
  33.         //下面是通过新建对象把Li中的数据打印出来。有其他简单方法(java视频才学到第七天)打印出Li中的内容吗?要在哪里修改
  34.         Li x = new Li();
  35.         x.study();
  36.         x.smoke();
  37.         System.out.println("-------------------");
  38.          //以下方法可以将Li中的数据打印出来。
  39.          Student s = new Li();//父类引用指向子类对象,向上转型(多态)
  40.           s.sleep();
  41.           Li l = (Li)s;//强制将父类的引用指向子类引用类型,向下转型。
  42.           l.study();
  43.           l.smoke();
  44.     }
  45. }
复制代码
//父类引用指向子类对象,向上转型(多态)//强制将父类的引用指向子类引用类型,向下转型。
打印结果:
学习方法1
抽烟
-------------------
爱趴桌子上睡觉!
学习方法1
抽烟


作者: pandapan    时间: 2014-5-14 22:13
这位同学,对你的问题的描述不太理解,你看哈,Class Li中一共有三个方法,不知道您想优化那个呢?
1.如果只是想单纯的调用Study方法,那么可以采用二楼的回答,向上转型。
  1. Student s = new Li();//父类引用指向子类对象,向上转型(多态)
复制代码
,或者直接用自身的引用指向自身的对象
2.如果要单独调用sleep方法,因为是自己类独有的,那么必须采用自身的引用来调用。或者Li(s),即将向上转型的结果再转为自身,不过没感觉到优化,只是用到了多态
3.如果要调用smoke方法,两种方式,一是直接用自身的引用指向自身的对象(Li l = new Li()),二是采用接口的方式,表达如下:
  1. Smoking smoker = new Li();
复制代码

希望能够帮到你
作者: Blüe-wǒlf    时间: 2014-5-15 21:59
pandapan 发表于 2014-5-14 22:13
这位同学,对你的问题的描述不太理解,你看哈,Class Li中一共有三个方法,不知道您想优化那个呢?
1.如果 ...

恩。看到了。谢谢两位同学。




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