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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hunter 初级黑马   /  2013-4-3 20:24  /  1551 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

abstract classinterface有什么区别? 蒙了,好像都是可以多态啊

评分

参与人数 1技术分 +1 收起 理由
杞文明 + 1

查看全部评分

4 个回复

倒序浏览
都不能被直接实例化,都可以通过继承实现其抽象方法。
不同点:
接口支持多继承;抽象类不能实现多继承。
接口只能定义行为;抽象类既可以定义行为,还可能提供实现。
接口只包含方法(Method)、属性(Property)、索引器(Index)、事件(Event)的签名,但不能定义字段和包含实现的方法;
抽象类可以定义字段、属性、包含有实现的方法。  
接口可以作用于值类型(Struct)和引用类型(Class);抽象类只能作用于引用类型。例如,Struct就可以继承接口,而不能继承类。
回复 使用道具 举报
本帖最后由 程媛媛 于 2013-4-3 20:43 编辑

抽象类与接口的相同点:都不可以创建对象。
抽象类与接口的不同点:
①接口中的方法都必须是抽象的,抽象类中的方法可以不是抽象的;
②接口中定义的变量都是常量,抽象类中可以不定义常量;
③接口通过implements实现,可以多实现,抽象类通过extends实现,只能继承一次;
④接口中的方法都必须是抽象方法,抽象类中可以不定义抽象方法。
类、抽象类、接口之间的关系:
① 类与类之间是继承关系,一个类只能有一个直接父类,可以有多个间接父类
② 类与抽象类之间是继承关系,只能有一个继承。
③ 类与接口之间是实现关系,一个类可以实现多个接口
④ 接口与接口之间是继承关系,并且可以多继承。
定义一个抽象类:
  1. abstract class Demov{//定义一个抽象类
  2.         public int x = 8;
  3.         public void printa(){//定义一个普通方法
  4.                 System.out.println("x="+x);
  5.         }
  6.         abstract void show();//定义一个抽象方法
  7. }
  8. class Subb extends Demov{
  9.         public void show(){}//覆写show方法,否则Sub就是一个抽象类,需要用abstract修饰。
  10. }
复制代码
定义一个接口:
  1. interface Iner{
  2.         public static final double PI = 3.14;
  3.         int NUM = 5;//如果不写public static final,程序会自动加上。
  4.         public abstract void show();//定义一个抽象方法
  5.         //public void print(){}//错误的,不允许定义非抽象的方法。
  6. }
  7. class Ssu implements Iner{//Ssu类实现了Iner接口。
  8.         public void show() {//需要重写show方法,否则Ssu就是一个抽象类。
  9.                 System.out.println("show......");
  10.         }
  11. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
杞文明 + 1

查看全部评分

回复 使用道具 举报
它们有以下区别:
a. interface中不能有字段,abstract class则可以;
b. interface可以被多重继承(即可以被多个具体类实现),abstract class则不可以;
c. interface中不可能有任何成员方法被实现,abstract class则可以。事实上,一个类中只要有一个成员方法是
  abstract的,那么这个类就一定是abstract class,abstract class中可以有非abstract的方法;

评分

参与人数 1技术分 +1 收起 理由
杞文明 + 1

查看全部评分

回复 使用道具 举报
实现多态有三种方法
1、虚方法
2、抽象类
3、接口
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马