java中到底为什么要用到抽象类?

比如有个类A,把它设置成abstract是为了不让它实例化,只能表示一个抽象的或者不具体的无法实例化的概念,但是就算不在这个A的前面加abstract照样可以实现很多类的继承,那我真的不太理解设置抽象类的意义到底在哪里,请各位不吝赐教!

4个回答

抽象类定义一些有一定关系的类的共同行为,比如一个几何图形类,几何图形包括多种图形,如,正方形,圆形,矩形,三角形等,而每种图形用有各自的面积周长计算公式,所以可以在几何图形类里抽象这些公共方法,而不提供真正方法(也没法提供,所以只能是抽象了)。之后各种图形都可以进行面积周长的比较,总不能重载很多个比较函数,所以这时就可以定义一个比较函数,参数类型是父类,这样这些图形就都可以进行比较了。而在比较函数里,由于多态,对象会调用自己独特的面积周长计算函数。

havedream_one
havedream_one en
大约 4 年之前 回复
qq_23908539
qq_23908539 谢谢你。所以这个意思是不是就是说如果设置抽象类其实是为了这个多人操作同一个代码的时候避免不必要的错误(比如A君把WC类“设计”成抽象的,他自己知道,但是没在前面加abstract,B君这时候来就很容易把WC类误以为是费抽象的这样)?
大约 4 年之前 回复
havedream_one
havedream_one 回复qq_23908539: 去掉之后就可以new一个对象,而对于这样的类new 一个对象是没有什么意义的
大约 4 年之前 回复
havedream_one
havedream_one 回复qq_2390853去掉之后就可以new一个对象,而对于这样的类new 一个对象
大约 4 年之前 回复
qq_23908539
qq_23908539 谢谢,这些我都懂,可是我的意思是如果我把父类前的abstract去掉了,照样可以实现这些功能啊,为啥非得硬性给他设置成abstract?
大约 4 年之前 回复

本身不允许被实例化,有的方法不好实现,本身实例化没有意义

比如说抽象流,你说怎么实现呢?

但是不同于接口,抽象类可以编写一些代码,有时候虽然做什么不确定,但是做的流程是确定的,这些代码可以先写起来。

u013179958
CSDNRGY 我觉得抽象类一般应该是在企业开发中才会用到,如果是自己开发程序,完全用不上这些
大约 4 年之前 回复

因为抽象类是一种概念,没有对应的实例(即不能定义成对象的实例)

例如定义抽象类车,只是抽取了车的共性,但此抽象类没有实例的车可以对应。这只是一种为了与现实对应的定义方法,你不用抽象关键字,你定义的类就可以实例化。但是实例化后,定义出来的实例没有实用价值。

qq_23908539
qq_23908539 谢谢你。所以这个意思是不是就是说如果设置抽象类其实是为了这个多人操作同一个代码的时候避免不必要的错误(比如A君把WC类“设计”成抽象的,他自己知道,但是没在前面加abstract,B君这时候来就很容易把WC类误以为是费抽象的这样)?
大约 4 年之前 回复

比如shape类有一个方法叫getarea

zhrubin
zhrubin 回复qq_23908539: 比如不用抽象类,getArea这个方法,你的代码要怎么写?
大约 4 年之前 回复
qq_23908539
qq_23908539 嗯,,请问这个抽象不抽象有什么联系么
大约 4 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
java 为什么要设计抽象类
java 为什么要设计抽象类, 干吗要这样设计啊 ,这样麻烦不rn如果有用 ,那他在开发上起到的作用是什么。
JAVA 为什么要使用抽象类
JAVA 为什么要使用抽象类 使用抽象类有什么好处
哪个设计模式要用到抽象类?
在学设计模式,有这么个问题,都有哪些设计模式一定要用到抽象类,rn如果有例子就更好了。rnrn多谢!
到底什么时候要用到线程?
一直不太明白到底什么时候要用到线程?该怎么学习这方面的知识呀?
为什么要使用抽象类
不是使用抽象工厂这个设计模式,而是单纯的使用抽象类 为什么要使用抽象类 抽象类必须有一个普通的类来继承,才能发挥抽象类的作用。 抽象类中可以实现方法,约束继承它的类。并保留抽象类中方法 比如一个支付的业务 可以使用多种支付方式,支付的业务也是相类似的,如: 组织支付参数, 支付方的接口协议, 回调方法等。 但最后都要实现的是支付成功后执行的业务, 这样抽象类就发挥了作用。 接
为什么要接口和抽象类
一直使用抽象类和接口,谁能说说为什么要用这些,用了到底在项目中有什么好处了?rn回答的要深刻些啊!!
[Thinking in java] _我为什么要使用抽象类
感觉工作了之后没怎么用到抽象类 最近在看组内大佬的code的时候 发现很多抽象类的使用,所以去百度了一把:使用抽象类到底有哪些好处 => code by 信哥 转载注明出处 /** * @author diego * @time 2019-02-26 11:29 * @description */ public abstract class AbstractInstr...
在java中,什么时候应该用到抽象类啊?
在java中,什么时候应该用到抽象类啊?一个面试题目
为什么要用到随机数
在delphi中查询海量数据的时候,为什么要用到随机数?
为什么要用到并发
一直以来并发编程对于刚入行的小白来说总是觉得高深莫测,于是乎,就诞生了想写点东西记录下,以提升理解和堆并发编程的认知。为什么需要用的并发?凡事总有好坏两面,之间的trade-off是什么,也就是说并发编程具有哪些缺点?以及在进行并发编程时应该了解和掌握的概念是什么?这篇文章主要以这三个问题来谈一谈。 1. 为什么要用到并发 一直以来,硬件的发展极其迅速,也有一个很著名的"摩尔定律",可能会奇怪...
socket通信中为什么要用到回调函数?
在SOCKET通信的服务器端,为什么一般要用到回调函数?使用线程可以理解,一般是为了系统不处于类似死机;那是用回调函数又是为什么呢?
Android开发中为什么要用到线程
1,Android开发过程中为什么要线程 2,Android中使用Thread线程会遇到哪些问题
为什么要有java抽象类
抽象类有抽象方法,和不能实例化。我可以用一个具体类来完成抽象类带来的好处,为什么还有要有抽象类呢。
为什么要用到HsessionHandle 的呢?
在加密过ECB 加密过程中为什么要用到hSessionHandle呢?rnrn请详细的讲述一下这是什么原因呢? 为什么 在加密的过程中要用到hSessionHanle rnrn呢?为什么在加密的过程中会用到会话的句柄呢?
为什么socket编程要用到线程
在socket编程中通常都要用到线程,rn为什么?
为什么要用到泛型类、泛型方法
一. 为什么要使用泛型程序设计           泛型程序设计意味着编写的代码可以被很多不同类型的对象所重用。例如,我们不希望为聚集String和File对象分别设计不同的类。实际上根本不需要那么做,因为一个ArrayList类可以聚集任何类型的对象。这是一个泛型程序设计的实例。 在Java SE5.0之前,Java的泛型程序设计是用继承实现的,ArrayList类只负责维护一
为什么要用到代理呢?
小弟我刚来的,看到大家讨论代理的问题,用它有什么用呢?最好再结实一下它的原理rn我们在家里拨号的要不要用到代理服务器?
到底为什么要学vc++??
我以前对电脑很感兴趣,很想自己也能编个程序。但是,读了计算机专业后,才发觉无聊的很,对编程也没有以前那种执着了!现在毕业了,居然连vb都不会,工作也找不到,当然我是大专的!rnrn所以,我现在学vc++的唯一目的就是能学成之后找到工作,能赚点钱,以后在别人面前能吊一点.....不知道这样的动机能学好吗???
到底为什么要进行字节对齐?
最近一段时间总是被内存对齐这个问题困扰着,上网查找了一些资料,可以说这些资料讲解的都是一个模板,就是为了提高cpu的访问效率,如果对齐的话需要一个时钟周期访问,那么不对齐的话就需要两个时钟周期访问,所以要进行字节对齐,说一句不太好听的话,[b]全是废话[/b],谁不知道是为了提高访问效率,还用他们说,都没有讲解出到底为什么要进行内存对齐(不需要告诉我这是为了提高cpu的效率,呵呵!),cpu是如何通过数据总线来读取内存中的数据?rnrn这个是我个人的理解(不知道对不对):rnrn[color=#FF0000]内存访问粒度是不变的,现在的计算机中cpu的内存访问粒度是四个字节,也就是每次从内存中总是取四个字节的数据,如果不存在char与short类型的数据的话cpu每次都会取得想要的值,不用进行一个剔除就能够得到想要的,可是事实上是存在char类型与short类型的数据,这样cpu在取这两种类型的数据的时候就需要进行剔除了,因此在效率上就存在了一个损失,但是永远都不可能实现“利益”的最大化,虽然在效率上存在一定的损失,可是却节约了一部分的内存空间,字节对齐只是一个折中的方法,这种方法并不是十全十美的!![/color]rnrnrn计算机都有一个默认的对齐模数,如果说默认对齐的模数是四个字节的话,那么是不是每个类型的数据都会对齐到四个字节呢??比如说一个char类型的数据a和一个short类型的数据1 ,char类型数据起始地址是0x00的话,那么按照默认的四字节对齐,应该是这样的吗?rnrn0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08rnrn0a cc cc cc 01 cc cc cc ccrnrn后面的字节是为了四字节对齐而填充的呢?rnrn不知道我的理解是否是对的!望高手指正!!rnrn rnrn但是如果我们设置了对齐字节数的话,比如我们设置了#pragma pack(1),这样计算机中默认的对齐字节数就不再发挥作用了??rnrn这样对齐的字节数就会按照有效对齐字节数来进行字节对齐呢?rnrn如:rnrn0x00 0x01 0x02 rnrn0a 01 ccrnrn我的这个理解是对的吗??望指正!!rnrn rnrn如果我的理解没有问题的话,那么为什么还要设置字节对齐呢??这样不是在cpu访问效率上是一种损失吗如果是提高cpu的访问效率的话,因为数据总线的宽度是32位的,那为什么不把每一个类型的数据都设置为四个字节对齐呢???难道就是为了节约内存空间而损失了访问效率?rnrn[color=#0000FF]希望高手能够给出一个全面的解释呀!呵呵![/color]rnrn
为什么要用到两个变量?
为什么要用到两个变量?rnread()) !== false)rnrnecho "filename: " . [color=#FF0000]$file[/color] . " ";rnrnrn$dir->close();rn?> rn我的理解是:rn第1个变量:是形式变量;rn第2个变量:是实际变量;rn当打开images 目录里的文件,$file变量把获取到的内容传递给$dir变量,不知道对不对?
LUA脚本到底要怎么用到C++程序中?
我看了,LUA程序设计的书!rn也看了LUA文档.rn懂了理论,看了语法!!rnrn都看了!rnrn可是,现在我还是不知道到底怎以把LUA脚本用到C++程序里!!rnrn主要是,不知道要包括哪个库和文件!rnrn比方说,我在C++程序里,写一个rnrnint add(int a,int b)rnrn return a+b;rnrnrn这个A和B我想放到脚本里输入数字!!rnrn问题是,我这个C程序要怎么能执行LUA脚本, 我的C程序要包含哪些LUA的头文件 ,和库??rnrn最好给我一个最简单的C源码,谢谢!!rnrn
Java中为什么要有抽象类的概念?
首先你要看到普通类的缺点:假设我有一个父类:class Animal            //创建一个动物类 { String name; int age; public void cry()    //动物会叫 { System.out.println("不知道怎么叫!");    //可是我们不知道它怎么叫 } }假如我下面有一个猫类和狗类继承了这个动物类:class Dog ...
java中为什么要用抽象类和接口?
开发过程中,为什么要写一些接口或者抽象类,直接用类代替他们不可以吗?还有两者在使用的时候,我是选择用接口呢还是用抽象类,两者的区别?一直不是很明白,希望可以回答的详细些,因为我是刚入行的菜鸟,在此非常感谢!
Java 到底要学什么
学Java到底要学些什么啊?感觉我还算很初级的入门,怎么感觉和c区别不是很大呢,算法靠的是思想,程序实现的话,就是一些语法的问题.Java有什么特别之处吗?
抽象类定义?为什么要使用抽象类?
为什么要使用抽象类? 有什么好处? 答案:1  现实中一些父类中的方法没必要写  各个子类中的方法会有所不同 所以没必要在父类中写 2  看被人代码时候会注意这是抽象方法 会有个提示作用 3 当看到一个类是抽象的,要关心他的抽象方法, 因为他的子类一定会重写他,然后去找抽象类的引用,,会有多态性的体现 4  面向对象复杂但是是为了方便解决问题  5  含有抽象方法的类必须定义为抽象类 ...
为什么Spring要使用这么多的抽象类??
[img=https://img-bbs.csdn.net/upload/201406/22/1403447234_787986.png][/img]rn刚学Spring,发现ClassPathXmlApplicationContext类有很多的抽象父类,想知道为什么会这样设计啊[img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/monkey/11.gif][/img]rnrn先谈下自己的理解:rn就好比一个俄罗斯方块,可以把方块设计为抽象类,rn至于方块是什么形状的,如何旋转,则让方块子类来实现. rn可是为什么ClassPathXmlApplicationContext 需要有4个抽象父类?rnrn[img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/monkey/50.gif][/img]
attribute到底干什么用到的?
没有弄明白。请大虾们举个例子,解释一下。最好是个自定义的attribute的完整例子。
java中抽象类与接口
今天第一次知道java中的抽象类可以没有抽象方法,而且可以抽象类中的静态非抽象方法可以通过抽象类名.静态方法名来调用。 第一次知道Java SE 8中interface可以包含default方法,并引入了Lambda表达式。 具体介绍可以参考 关于Lambda表达式:  http://www.infoq.com/cn/articles/Java-se-8-lambda 关于interfac
十二、java中的抽象类
Java抽象类 就是把具有相同特性的事物归为一个抽象类 概念 抽象类不能直接实例化对象。(即不能new一个新对象)抽象类一般包括一个或几个抽象方法,抽象方法就是abstract修饰的方法。抽象方法只有方法名,没有方法体。(就好比一个模板)抽象类的子类必须重写父类的抽象方法(重写写入方法体)子类才能真正实例化,否则子类也是一个抽象类。抽象类不一定有抽象方法,但有抽象方法的类一定是抽象
Java中抽象类
抽象类用abstract修饰,必须有抽象方法,不能被实例化,抽象类可以有构造方法。抽象方法也用abstract修饰。抽象方法有两个特点,一是被abstract修饰,二是没有方法体。 abstract public class Fruit { public String color; public Fruit() { color="绿色"; } public abstract...
Java中抽象类和接口
看了抽象类和接口的例子,但是就是不明白他们之间的区别,而且什么时候用抽象类,什么时候用接口,这两者的作用分别是什么
Java中的抽象类和接口
关于Java中的抽象类和接口的讲解
Java中的抽象类详解
一、为什么使用抽象类首先做一个分析如下:1:定义Dog类 有颜色属性和叫的方法 2:定义Bird类 有颜色属性和叫的方法 3:定义其父类Animal1:抽取共性颜色属性和叫的方法 1:颜色的属性可以使用默认初始化值。 2:叫的方法在父类中如何定义? 1:狗是旺旺 2:鸟是叽叽喳喳 3:可以将父类的方法定义为狗叫让鸟继承父类重写叫的方法
Java中接口和抽象类
java只支持单继承,但可以继承多个接口,interface和abstract class 是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力。 abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性,甚至可以相互替换,因此很多开发者在进行抽象类定义时对于 abstract class和interf...
Java中的抽象类
Java语言流行到现在已经几十年了,很多人都听说过Java语言也想要学习,但是网络上的各种各样的课程名目繁多,很多人都无法坚持的学习下去,究其原因可能是课程太枯燥,无趣,长时间的学习让人产生了厌倦,本课程旨在通过简单通俗的语言结合一些图形化的小游戏,让大家找到学习的乐趣,看到自己所编写的小游戏是不是有一种成就感呢?<br /><br />
java中的抽象类和抽象方法
抽象类         在关键字class前有修饰符abstract 加以修饰,抽象类没有具体的对象的概念类。例如由“鸟”这个类,可以派生出“麻雀”、“鸽子”、“鹦鹉”等子类。只要是一直实实在在的鸟,就一定属于一种具体的鸟。所以说“鸟”这个类只是代表了所有鸟类的共同属性,作为一个抽象的概念,其没有具体的对象。(即抽象类不能创建对象,必须产生其子类,由子类创建对象)         运用这种方法
java中的抽象类abstract
1.1 抽象类概述 当编写一个类时,我们往往会为该类定义一些方法,这些方法是用来描述该类的功能具体实现方式,那么这些方法都有具体的方法体。 但是有的时候,某个父类只是知道子类应该包含怎么样的方法,但是无法准确知道子类如何实现这些方法。比如一个图形类应该有一个求周长的方法,但是不同的图形求周长的算法不一样。那该怎么办呢? 分析事物时,发现了共性内容,就出现向上抽取。会有这样一种特殊情况,就是方
Java中的抽象类与接口
一 抽象类 抽象类是一个用关键字abstract所修饰的类,该类只能作为父类被继承,而不能创建对象。抽象类的基本格式为: 访问权限修饰符 abstract class 类名{ // 类体 } 在抽象类中,可以存在一种特殊的方法:抽象方法。抽象方法是只有方法首部而没有方法体的方法(连花括号“{}”都没有),也需要使用abstract关键字,其基本格式为: 访问修饰符 abstra...
java中的抽象类的作用
抽象函数的作用有很多,我就举一个例子,(mars老师的例子): 打印机: 父类---Printer 子类---HBPrinter 子类----CanonPrinter 测试类----Test //定义一个打印机类 abstract class Printer{ //定义三个成员函数 void open(){ System.out.println("open"); } v
java中的抽象类:
package cn.mdln.study2; /** 继承是为了解决代码统一问题  * 多态性为了解决类型统一问题多态的前提(必须是有继承关系)  * 抽象类:  * @author Administrator  * 抽象类一定要被子类所继承,因为抽象类中有方法名,没有方法体  * 所以子类必须强制性对父类中的所有抽象方法进行复写  * 抽象类因为有抽象方法,所以不能直接实例化对象
相关热词 c++和c#哪个就业率高 c# 批量动态创建控件 c# 模块和程序集的区别 c# gmap 截图 c# 验证码图片生成类 c# 再次尝试 连接失败 c#开发编写规范 c# 压缩图片好麻烦 c#计算数组中的平均值 c#获取路由参数