黑马程序员技术交流社区

标题: 关于函数复写与抽象方法的问题 [打印本页]

作者: 没壳的蜗牛    时间: 2014-5-22 12:27
标题: 关于函数复写与抽象方法的问题
本帖最后由 没壳的蜗牛 于 2014-5-23 21:04 编辑
  1. class Fu
  2. {
  3.     public void method()
  4.     {
  5.          System.out.println("fuMethod");
  6.      }
  7. }
复制代码

不同的子类继承父类,在不同的子类中为了实现功能一样的方法method(),但是具体功能内容不一样,我们可以直接在不同子类中复写method方法即可。
  1. class Z1 extend Fu
  2. {
  3.     public void method()
  4.     {
  5.          System.out.println("Z1_Method");
  6.      }
  7. }
复制代码
  1. class Z2 extend Fu
  2. {
  3.     public void method()
  4.     {
  5.          System.out.println("Z2_Method");
  6.      }
  7. }
复制代码


为了实现上述功能,我可以将父类定义为抽象类,method()定义为抽象方法。
  1. abstract class Fu
  2. {
  3.     public abstract void method();

  4. }
复制代码

然后在不同的子类中直接复写method()即可。
请问这两种方法个有什么好处,各有什么缺点。小白一个,希望大神留下代码。谢谢!
作者: 格子、    时间: 2014-5-22 12:59
抽象类的继承是必须复习的,而且是不可以创建对象的。其原因就是其中的抽象方法就是从子类中不断向上抽取出来的,也就是说所有子类都有的方法,但是可能方法的功能不一样,所一就只声明方法不声明方法的主体。
抽象类一般都是定义的抽象方法。
想要成为抽象的类的子类就必须复写其中父类所有的抽象方法,不然你还是个抽象类,就像你要想当我儿子就必须跟我姓一样,不跟我就不承认!!!
普通的类的继承,就是跟父类关系,其中的方法我可以直接用,如果功能一样但是内容不一样的话,直接复写掉就行,在方法执行的时候会直接优先选择子类的执行,也可以用super指定执行父类的方法,其余的直接用怎么万都行,没什么限制条件,只要你继承了我就能拥有我的一切!!!

我感觉啊,这要主要是明白其特点,在应用的时候注意就好了。
代码体现的话,最多就是一个抽象类,你没复写办法就不让new对象,而普通的继承没关系,没太大的意思,忘能帮到楼主!!!
作者: MiaoPF    时间: 2014-5-22 13:00
理解不了,我觉得抽象类,抽象方法,使得代码更复杂了!难道真正的好处体现在设计阶段?同求大神解答!
作者: 寻找人生目标    时间: 2014-5-22 13:13
同求                             
作者: 木华    时间: 2014-5-22 14:19
我说说自己的一点自己的理解吧,抽象类就是因为他太抽象了,通过父类的功能函数我们是不知道子类会具体如何做一件事情的,就比如Animal类,它下面可以有子类猫,狗,羊,他们都有吃的功能吧,但是他们吃的都不一样,猫吃鱼,狗吃骨头,羊吃草,所以此时父类就可以定义为抽象类,如果为Cat类它里面还有子类白猫,黑猫,花猫,他们都是吃鱼,他们的共同点向上抽取不是很抽象,此时就可以定义为一般类。
作者: never615    时间: 2014-5-22 16:18
本帖最后由 never615 于 2014-5-22 16:20 编辑

1.java是面向对象的。现实中很多具体的实物,全部具体实现不可能,但抽象出一些共同的方法还是很容易实现的
2.抽象出这些方法后,你创建具体对象的时候就方便了,继承了抽象类,你就要实现里面的抽象方法,系统也会提示你

所以这样会让你写代码轻松点,条理点


以前开发JAVA这个语言的时候,他们也想啊,好多具体的实现,但他们有共同的方法,他写个抽象类,继承实现,这样还有好多子类,子类的子类写起来就会轻松许多

作者: code2014    时间: 2014-5-22 17:47
父类若是抽象类就不能生成实例对象,并且子类必须实现父类的抽象方法
父类若是普通类,则可以生成实例对象,子类对父类的方法可以重写,也可以不重写
作者: 13556793092    时间: 2014-5-22 18:00
个人觉得还是应用的随机应变问题,抽象类的出现增加了程序的扩展性。个人在mvc模式中感觉比较有用。
有些事情只能自己慢慢体会,至于你说的有什么不同。
当父类的方法为抽象时,子类必须复写该抽象方法,
当父类的方法是普通方法时,子类可以复学,也可以直接继承过来。





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