黑马程序员技术交流社区

标题: 关于抽象类中的不抽象方法 [打印本页]

作者: 张冬冬    时间: 2011-11-18 21:58
标题: 关于抽象类中的不抽象方法
为什么有的抽象类要定义一个不抽象的方法,这个方法是干嘛用的,想要在其他类中调用这个类中的不抽象方法应该怎样操作?
作者: 田忠    时间: 2011-11-18 22:36
{:soso_e130:}
作者: 清秋    时间: 2011-11-18 22:54
一些公用的方法就不抽象了呗。对于继承自这个抽象类的子类,都可以使用的方法就可以不抽象

具体问题具体分析吧。看情况定

在以后的学习、开发中慢慢探索吧。具体的例子我也说不上来

直接把方法定义成public,然后子类.方法名()就可以了


作者: 徐杨    时间: 2011-11-18 23:17
本帖最后由 徐杨 于 2011-11-18 23:17 编辑

如果不定义抽象方法的抽象类。
没有抽象方法的抽象类存在意义仅仅是不让该类创建对象。因为创建的没意义。
抽象类中已实现的方法,目的是所有对象共性的方法的提取,提高程序的复用性
作者: xiwangliujiao    时间: 2011-11-19 01:14
如果是公有方法可以直接类名.方法名就可以了,抽象类按道理说是要有非抽象方法的,不然直接定义成接口好了,这些等用到的时候可能体会会更深些,
作者: 申绪胜    时间: 2011-11-19 10:58
Java提供一个叫做“抽象方法(abstract method)1”(对于C++程序设计员来说,这相当于C++语言中的纯虚函数)的机制。这种方法是不完整的;仅有声明而没有方法体。下面是抽象方法声明所采用的语法:

abstract void f();

包含抽象方法的类叫做“抽象类(abstract class)”。如果一个类包含一个或多个抽象方法,该类必须被限制为是抽象的。(否则,编译器就会报错)

如果一个抽象类不完整,那么当我们试图产生该类的对象时,编译器会怎样处理呢?由于为一个抽象类创建对象是不安全的,所以我们会从编译器那里得到一条出错信息。这里,编译器会确保抽象类的纯粹性,我们不必担心会误用它。
如果从一个抽象类继承,并想创建该新类的对象,那么我们就必须为基类中的所有抽象方法提供方法定义。如果不这样做(可以选择不做),那么导出类便也是抽象类,且编译器将会强制我们用abstract关键字来限制修饰这个类。

作者: 张冬冬    时间: 2011-11-19 22:26
徐杨 发表于 2011-11-18 23:17
如果不定义抽象方法的抽象类。
没有抽象方法的抽象类存在意义仅仅是不让该类创建对象。因为创建的没意义。
...

我觉得你的回答和我问的是一个。
我可以这么理解你说的话吗:
   意思就是不让在这个类中创建一个自己类名的对象吗?
   比如就是有一个Demo的抽象类中有一个不抽象的show方法
   就是不让Demo d = new Demo  是要达到这个效果吗?
作者: 徐杨    时间: 2011-11-19 22:56
你的理解有误
抽象类中可以选择是否有非抽象类,也可以不用定义非抽象类

而接口中全部都应该是抽象的

抽象类是不能实例化的
抽象类是各种类向上抽取的一个抽象   顾名思义抽象类
例如
抽象类  驾照 有一个抽象方法  驾驶
继承抽象类的类   比如 汽车驾照,飞机驾照,摩托车驾照  均可覆盖抽象类中的驾驶
但是驾照有一个共性的方法  比如  有一个方法是  给警察检查
就不需要使用子类继承了,因为子类的实现都一样,就可以提取到抽象类中实现  这样就出现了你所说的 抽象类中含有已实现的方法
作者: 柴亚飞    时间: 2011-11-20 06:49
徐杨 发表于 2011-11-19 22:56
你的理解有误
抽象类中可以选择是否有非抽象类,也可以不用定义非抽象类

方法不要写成类,容易让人误会。
“抽象类中可以选择是否有非抽象类,也可以不用定义非抽象类”应该是“抽象类中可以选择是否有非抽象方法,也可以不用定义非抽象方法”


作者: 徐杨    时间: 2011-11-20 10:13
确实写错了不好意思,应该是吧抽象类中可以选择是否含有非抽象方法
作者: 张冬冬    时间: 2011-11-21 23:03
徐杨 发表于 2011-11-19 22:56
你的理解有误
抽象类中可以选择是否有非抽象类,也可以不用定义非抽象类

我今天仔细总结下了,得出一下结论还请大家看看对不:
抽象类中的不抽象方法就是再向上抽取的过程中,所有子类都具有的相同的不用被重写的方法
这样在子类继承的时候直接就可以拿来用,不像定义的抽象方法中,大家实现这一方法的途径都不同
所以抽象类中的不抽象的方法总结下来就是,直接可以被子类直接调用所有子类对象都具有的相同的属性。




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