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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

©  夜风 初级黑马   /  2012-5-19 22:31  /  2558 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由  夜风 于 2012-5-19 22:33 编辑
  1. class Employee
  2. {
  3.         private String name;
  4.         private String id;
  5.         private doudle pay;

  6.         Employee(String name,String id,double pay)
  7. {
  8.         this name=name;
  9.         this id=id;
  10.         this pay=pay;
  11. }
  12.         public void abstract work();
  13. }

  14. class Manager extends Employee
  15. {
  16.         private int bonus;
  17.         Manager(String name,String id,double pay,int bonus)
  18. {
  19.         super(name,id,pay);
  20.         this.bonus=bonus;
  21. }
  22.         public void work()
  23. {
  24.         System.out.print("manager work");
  25. }
  26. }

  27. class pro extends Employee
  28. {
  29.         pro(String name,String id,double pay)
  30. {
  31.         super(name,id,pay);

  32. }
  33.         public void work()
  34. {
  35.         System.out.print("pro work");
  36. }
  37. }
复制代码
员工类定义了一个抽象方法,然后经理类和普通员工类继承了员工类并都重写了工作方法,但是我觉得员工类的抽象方法定义的多余呢,若果不写这句public void abstract work(); 直接在经理类和普通员工类里定义工作方法不是一样吗,简单来说就是不理解没有方法体的抽象方法有什么用。

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

6 个回复

倒序浏览
本帖最后由 孙宇晨 于 2012-5-19 22:36 编辑

这个是按逻辑来的. 逻辑是 经理室一个员工 员工有工作这个方法. 经理也是员工 他只是有不同的工作也就是重写工作方法.只要是员工 就都会有工作的. 不能给经理单独定义一个工作方法 这不符合逻辑。按这种思维逻辑 是为了你做的代码规范化.别人也能看得懂能用.  
回复 使用道具 举报
本帖最后由 袁錦泰 于 2012-5-19 23:08 编辑

抽象类所提供的更多是规则,规则是什么?规则就是你必须要去遵守。在前期分析时不断向上抽取事物的共性内容,最终形成抽象类,但是在编写代码的同时你要关注代码的可读性、重用行、规范性等等原则,现在所涉及的代码很少,所以抽象类的作用很难体现出来,当你碰到上千行的复杂代码时,按照你做说的分别为每个对象定义其功能,那可就违背了JAVA语言的本质--面向对象,根据类与类自上到下的关系,你要先构思其框架,用到哪些类和方法,并逐一的其实现它们,所以编写代码在统一规范的同时要做到细化。在初期实现时,一些简单的的方法可以直接写出来,但难免会遇到一个方法在不同的类中需要以不同形式体现,这时你便知道了抽象类的概念。也许有些方法可以不去马上实现留给其子类实现,但你必须要写出来,为其后期的扩展性和可维护性做考虑,因为这是计算机语言的书写原则。

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
之所以将工作抽取出来做成抽象的,由调用者来实现,是因为他们的工作方式和工作的内容不同,比如经理的工作可能就是负责整个项目组人员的协调安排,而你程序的工作就是敲代码。这样的好处就是增强了程序的扩展性和可维护性。
回复 使用道具 举报
袁錦泰 发表于 2012-5-19 23:03
抽象类所提供的更多是规则,规则是什么?规则就是你必须要去遵守。在前期分析时不断向上抽取事物的共性内容 ...

嗯,所以抽象类存在的价值是可读性和规范性吧,应该和其他人解释的可维护性没什么关系吧,因为在子类中是重新定义的方法而不是调用的抽象方法,所以改动也必须在子类中改动。我这么说对吗?
回复 使用道具 举报
 夜风 发表于 2012-5-20 11:30
嗯,所以抽象类存在的价值是可读性和规范性吧,应该和其他人解释的可维护性没什么关系吧,因为在子类中是 ...

嗯,你的代码按照框架写,后期修改起来就不会很麻烦,思路也会很清晰。无论怎样咱们都应该按照规则做就对了。
回复 使用道具 举报
  public void abstract work();  lz你乱搞  那有这样写的  应该  public abstract void  work(); 而且里面你的类是非抽象的,里面于n个错误,我都不知道你怎么发出来的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马