黑马程序员技术交流社区

标题: interface 和抽象类的区别 [打印本页]

作者: 嘻嘻哈哈嘻嘻    时间: 2014-7-10 16:44
标题: interface 和抽象类的区别
interface interdemo              //定义了个接口
{
public static final int a = 40;
public abstract void show();
}
abstract class absdemo          //定义了个抽象类
{
public static final int a = 40;
public abstract void show();
}
class testin implements interdemo
{
public void show()
{
  System.out.println(a);
}
}
class testin2 extends absdemo
{
public void show()
{
  System.out.println(a);
}

}



这两个使用起来好像没什么区别,然后抽象类和接口的具体区别在哪?

作者: 燿陚√揚葳    时间: 2014-7-10 22:08
抽象类与接口的区别:
1.抽象类只能被继承,而且只能是单继承
接口需要被实现而且,他可以多实现
2.抽象类中可以定义非抽象方法,子类可以直接继承使用
接口中都是抽象方法需要子类去实现
3.抽象类使用的是is a 关系
接口使用的是like a 关系
4.抽象类的成员修饰符可以自定义
接口中的成员修饰符是固定的。全部是public的

像你刚刚写的这个程序中,如果实际中真的碰到的话还是建议使用接口吧,这样的话扩展性更好,实现可以多实现,但继承只能是单继承,你继承了absdemo这个类,就不可以在继承其他类了,如果以后需要有其他功能类需要你继承,那就继承不了了,但如果是接口的话,你想实现几个就实现几个,而且实现的时候还可以继承,这样的话两个功能一样的接口和抽象类,你选哪个呢

作者: Coup_D`etat    时间: 2014-7-10 22:29
接口中的成员全是抽象的,抽象类里还可以定义非抽象的成员
作者: 淡夜清风    时间: 2014-7-10 22:43
抽象类被abstract修饰的class
接口是interface。
接口是一种特殊的抽象类。
相同点:都不能对象的实例化。

他们之间的不同点还是比较多的:
接口中的变量被public static final修饰的常量,而抽象类中的变量的修饰符可以自定义。
接口中的方法全都是public abstract修饰。接口中的方法都是抽象方法,没有具体实现。
而抽象类中的方法可以有非抽象的。
接口中没有构造函数,而抽象类中可以有构造函数。
抽象类是被子类继承的(用的是extend),而接口是要被其他类实现(用的是implements)。继承抽象类的子类不一定要全部实现抽象类中的抽象方法,但是实现接口的类必须要实现接口中的所有方法。
抽象类只能被单继承,而接口可以被多实现。
作者: zxtanshui    时间: 2014-7-10 23:04
学习了   
作者: 嘻嘻哈哈嘻嘻    时间: 2014-7-11 08:26
淡夜清风 发表于 2014-7-10 22:43
抽象类被abstract修饰的class
接口是interface。
接口是一种特殊的抽象类。

学习了.3q
作者: 嘻嘻哈哈嘻嘻    时间: 2014-7-11 08:28
燿陚√揚葳 发表于 2014-7-10 22:08
抽象类与接口的区别:
1.抽象类只能被继承,而且只能是单继承
接口需要被实现而且,他可以多实现

谢谢回答 学习了
作者: java_668    时间: 2014-7-11 08:59
接口和抽象类的概念不一样。接口是对动作的抽象,抽象类是对根源的抽象。
作者: 自闭宅男    时间: 2014-7-11 09:14
······················································赞
作者: on-on    时间: 2014-7-11 09:25
学习了喽。。。
作者: mytongyong    时间: 2014-7-11 09:34
接口是可以多继承的,而抽象类则只能单继承。
作者: 渴望学习    时间: 2014-7-11 15:16
抽象类和接口的区别:
1、从成员变量上区别:抽象类可以有任何形式的成员变量(访问类型可以任意),
     而接口中只能有默认的public static final修饰的成员变量;
2、从方法上区别:抽象类中可以有抽象方法(访问类型是public,protected),静态方法,构造方法,普通方法;
     而接口中只能有抽象方法(默认public abstract修饰);
3、一个类可以实现多个接口,但只能继承一个抽象类(extends必须写在implements之前)。

补充:a.接口可以继承接口。
           b.抽象类中可以有非抽象方法,但是有抽象方法的类一定是抽象类。
           c.普通类和抽象类唯一的区别:抽象类不能创建对象(被实例化),抽象类中有抽象方法。
              d. 抽象类和接口中定义的抽象方法,必须由子类或实现类全部实现,否则该类必须定义为抽象类。
          




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