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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 丁一 中级黑马   /  2013-3-16 10:03  /  3342 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 丁一 于 2013-3-16 12:19 编辑

抽象类到底是干啥的,有什么用,什么时候用,接口是一种特殊的抽象类,是不是像接口这样只有常量和方法,没有具体方法的就是抽象类啊

点评

如果问题已经解决了,请将分类改为已解决,如果没有解决,请继续追问。。谢谢  发表于 2013-3-16 11:05

评分

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

查看全部评分

8 个回复

倒序浏览
抽象类提供了一个继承的出发点,而具体的类不同,具体类可以实例化,应当给出一个有商业逻辑实现的对象模板。由于抽象类不可以被实例化,因此设计一个抽象类一定是用来被继承的,反过来也是对的:具体类不是用来继承的!
总结下抽象类的特点就是下面的:
1.抽象类不可以创建实例对象。2.抽象类中可以有普通方法,3.抽象类的抽象方法由其子类来实现。

评分

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

查看全部评分

回复 使用道具 举报
抽象类是含有抽象方法的类,不能被实例化,抽象类常用作当做模板类使用。
抽象类和接口的区别:

一个类可以有多个接口 只能有继承一个父类
抽象类可以有构造方法,接口中不能有构造方法。
抽象类中可以有普通成员变量,接口中没有普通成员变量
接口里边全部方法都必须是abstract的 抽象类的可以有实现了的方法
抽象类中的抽象方法的访问类型可以是public,protected   但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型
抽象类中可以包含静态方法,接口中不能包含静态方法
抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。

评分

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

查看全部评分

回复 使用道具 举报
我自己的一些理解,看了网上的一些解释,总结一下:
1、抽象类里面可以有非抽象方法
但接口里只能有抽象方法
声明方法的存在而不去实现它的类被叫做抽像类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽像类,并让它指向具体子类的一个实例。不能有抽像构造函数或抽像静态方法。Abstract 类的子类为它们父类中的所有抽像方法提供实现,否则它们也是抽像类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。

2、接口(interface)是抽像类的变体。在接口中,所有方法都是抽像的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽像的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对像上调用接口的方法。由于有抽像类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口
希望对你有帮助~

评分

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

查看全部评分

回复 使用道具 举报
抽象类中可以有抽象方法,也可以没有抽象方法,抽象类不能使用new运算符创建对象,如果某个非抽象类是某个抽象类的子类,那么它必须重写父类的抽象方法,给出方法体。所以,抽象类只关心操作,即只关心方法名字、类型以及参数,通俗的来说就是只关心做什么、结果是什么、而不关心过程。抽象类可以让一个程序设计者忽略具体的细节而将工作放到整个程序的设计上去,具体的实现让下面的编程人员去实现。

评分

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

查看全部评分

回复 使用道具 举报
抽象类和抽象方法:
当多个类中出现相同功能,但是功能主体不同,这时可以进行向上抽取,这时只抽取功能定义,而不抽取功能主体。
抽象类的特点:
1,抽象方法一定在抽象类中
2,抽象方法和抽象类都必须被abstract关键字修饰
3,抽象类不可以用new创建对象,因为调用抽象方法没有意义
4,抽象类中的抽象方法要被使用,必须由子类复写其所有抽象方法后,建立子类对象调用
     如果子类只覆盖了部分抽象方法,那么该子类还是一个抽象类
   
例:abstract class Student
      {
         abstract void study();//方法无主体
      }

接口:
1,不可以创建对象,因为有抽象方法
2,需要被子类实现,子类对接口中的抽象方法全部覆盖后,子类才可以实例化,否则子类是一个抽象类

接口定义时格式特点:
  接口成员都有固定修饰符.
    常量:public static final
    方法:public abstract
    记住:接口中的成员都是public的
注意:接口可以被类多实现。

评分

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

查看全部评分

回复 使用道具 举报
.NET抽象类提供多个派生类共享基类的公共定义,它既可以提供抽象方法,也可以提供非抽象方法。抽象类不能实例化,必须通过继承由派生类实现其抽象方法,因此对抽象类不能使用new关键字,也不能被密封。如果派生类没有实现所有的抽象方法,则该派生类也必须声明为抽象类。另外,实现抽象方法由overriding方法来实现。
虚方法和抽象方法的区别:

虚方法,声明使用virtual关键字。调用虚方法,运行时将确定调用对象是什么类的实例,并调用适当的覆写的方法。虚方法可以有默认的实现体。
抽象方法,必须被派生类覆写的方法。可以看成是没有实现体的虚方法,如果类中包含抽象方法,那么类就必须定义为抽象类,不论是否还包含其他一般方法。
回复 使用道具 举报
如果你了解java api 就能了解很多!多看看吧!多学习吧
回复 使用道具 举报
丁一 中级黑马 2013-3-16 12:21:21
9#
  {:soso_e183:}
看来没事的时候得看api了,我主要想知道什么时候具体用到它
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马