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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张冬冬 黑马帝   /  2011-11-18 21:58  /  2727 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

为什么有的抽象类要定义一个不抽象的方法,这个方法是干嘛用的,想要在其他类中调用这个类中的不抽象方法应该怎样操作?

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1

查看全部评分

10 个回复

倒序浏览
{:soso_e130:}
回复 使用道具 举报
清秋 黑马帝 2011-11-18 22:54:26
藤椅
一些公用的方法就不抽象了呗。对于继承自这个抽象类的子类,都可以使用的方法就可以不抽象

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

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

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

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1

查看全部评分

回复 使用道具 举报
徐杨 黑马帝 2011-11-18 23:17:00
板凳
本帖最后由 徐杨 于 2011-11-18 23:17 编辑

如果不定义抽象方法的抽象类。
没有抽象方法的抽象类存在意义仅仅是不让该类创建对象。因为创建的没意义。
抽象类中已实现的方法,目的是所有对象共性的方法的提取,提高程序的复用性

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1

查看全部评分

回复 使用道具 举报
如果是公有方法可以直接类名.方法名就可以了,抽象类按道理说是要有非抽象方法的,不然直接定义成接口好了,这些等用到的时候可能体会会更深些,

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
Java提供一个叫做“抽象方法(abstract method)1”(对于C++程序设计员来说,这相当于C++语言中的纯虚函数)的机制。这种方法是不完整的;仅有声明而没有方法体。下面是抽象方法声明所采用的语法:

abstract void f();

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

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

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1

查看全部评分

回复 使用道具 举报
张冬冬 黑马帝 2011-11-19 22:26:21
7#
徐杨 发表于 2011-11-18 23:17
如果不定义抽象方法的抽象类。
没有抽象方法的抽象类存在意义仅仅是不让该类创建对象。因为创建的没意义。
...

我觉得你的回答和我问的是一个。
我可以这么理解你说的话吗:
   意思就是不让在这个类中创建一个自己类名的对象吗?
   比如就是有一个Demo的抽象类中有一个不抽象的show方法
   就是不让Demo d = new Demo  是要达到这个效果吗?

评分

参与人数 1技术分 +1 收起 理由
老罗 + 1 赞一个!

查看全部评分

回复 使用道具 举报
徐杨 黑马帝 2011-11-19 22:56:57
8#
你的理解有误
抽象类中可以选择是否有非抽象类,也可以不用定义非抽象类

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

抽象类是不能实例化的
抽象类是各种类向上抽取的一个抽象   顾名思义抽象类
例如
抽象类  驾照 有一个抽象方法  驾驶
继承抽象类的类   比如 汽车驾照,飞机驾照,摩托车驾照  均可覆盖抽象类中的驾驶
但是驾照有一个共性的方法  比如  有一个方法是  给警察检查
就不需要使用子类继承了,因为子类的实现都一样,就可以提取到抽象类中实现  这样就出现了你所说的 抽象类中含有已实现的方法

评分

参与人数 1技术分 +1 收起 理由
老罗 + 1 赞一个!

查看全部评分

回复 使用道具 举报
柴亚飞 黑马帝 2011-11-20 06:49:13
9#
徐杨 发表于 2011-11-19 22:56
你的理解有误
抽象类中可以选择是否有非抽象类,也可以不用定义非抽象类

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

回复 使用道具 举报
徐杨 黑马帝 2011-11-20 10:13:26
10#
确实写错了不好意思,应该是吧抽象类中可以选择是否含有非抽象方法
回复 使用道具 举报
张冬冬 黑马帝 2011-11-21 23:03:40
11#
徐杨 发表于 2011-11-19 22:56
你的理解有误
抽象类中可以选择是否有非抽象类,也可以不用定义非抽象类

我今天仔细总结下了,得出一下结论还请大家看看对不:
抽象类中的不抽象方法就是再向上抽取的过程中,所有子类都具有的相同的不用被重写的方法
这样在子类继承的时候直接就可以拿来用,不像定义的抽象方法中,大家实现这一方法的途径都不同
所以抽象类中的不抽象的方法总结下来就是,直接可以被子类直接调用所有子类对象都具有的相同的属性。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马