首页 > 试题广场 >

接口和抽象类的区别是什么?

[问答题]
java8新特性:
在接口中用default修饰的方法可以有函数体
发表于 2016-03-07 21:06:36 回复(3)
接口和抽象类的区别: 1、定义接口的关键字是interface ,抽象类的关键字是abstract class 2、接口中的方法都是抽象的,抽象类中可以有方法的实现(即非抽象方法) 3、一个类可以实现多个接口,但只能继承一个抽象类,所以一般来说,可以使用接口实现的尽量使用接口实现。比如Runnable就比Thread使用频率高的多 4、接口和抽象类中都可以定义变量,但是接口中定义的必须是公共的、静态的、Final的,抽象类中的变量跟普通类中的没有区别。 5、抽象类可以包含静态方法,但是接口中不可以! 6、接口中的方法必须是public的,抽象类中的方法可以使public 和 protected的 7、从设计上来说,接口是对一系列行为的抽象,而抽象类是对事物的抽象。 两者相同点: 1.抽象类和接口都不能直接实例化,如果要实例化,抽象类变量必须指向实现所有抽象方法的子类对象,接口变量必须指向实现所有接口方法的类对象。 2.抽象类里的抽象方法必须全部被子类所实现,如果子类不能全部实现父类抽象方法,那么该子类还只能是抽象类。同样,一个类实现接口的时候,如不能全部实现接口方法,那么该类也只能为抽象类。 两者不同点 : 什么时候使用抽象类和接口? 1.如果有一些需要默认实现的方法并且要求子类重写,那么使用抽象类。 2.如果想实现多重继承,那么必须使用接口 3.如果基本功能在不断改变,那么就需要使用抽象类
编辑于 2019-01-14 21:33:52 回复(4)
可以归纳为4点 1.抽象类可以提供成员方法的具体实现,而接口只存在用public abstract 修饰的没有方法体的方法 2.抽象类中的成员变量可以是各种类型的,而接口的成员变量只能是public static final类型 3.抽象类中可以有静态代码块与静态方法,而接口没有 4.一个类可以实现多个接口,一个类只能继承一个抽象类
编辑于 2016-04-13 14:48:12 回复(2)
1.接口中所有方法都是抽象的 ,而抽象类中可以有抽象方法和普通方法
2.一个类可以实现多个接口,但只能继承一个抽象类
3.如果一个类继承了一个抽象类或者实现一个接口, 却没有实现其中所有的方法,那这个类还是抽象类.
4.接口的变量都是final的 ,抽象类的变量可以不是final
5.接口中函数是public 抽象类的函数是public ,protected,private
6.区别太多了,没有统一答案的
发表于 2017-11-13 10:45:07 回复(0)
抽象类设计模板,接口行为规范
发表于 2016-09-09 10:45:11 回复(0)
从设计层面来说,抽象是对类的抽象,是一种模板设计,接口是行为的抽象,是一种行为的规范。

发表于 2016-07-28 15:21:08 回复(29)
Java接口中的成员变量默认为(public、static、final)、成员方法为(public、abstract) “Java中,一个类实现了某接口,则必须实现该接口中的所有方法么?”这句话其实是不准确的,因为我们还没有考虑到抽象类。 抽象类实现某个接口,可以不实现所有接口的方法,可以由它的子类实现。而普通类即非抽象类则必须实现接口里的全部方法。 如果抽象类也可以不重写方法,不过子类依然是抽象类
编辑于 2016-12-27 23:48:25 回复(0)
抽象类:一般用于描述一个体系单元,将一组共性内容进行抽取。特点,可以在类中定义抽象内容让子类实现,可以定义非抽象内容让子类直接使用。它里面定义的内容都是体系中的基本内容。 接口:一般定义对象的扩展功能,是在继承之外还需要这个对象具备一些功能。 抽象类和接口的共性都是不断向上抽取。 区别:抽象类只能被继承,而且是单继承。接口需要被实现,而且是多实现。 抽象类中可以定义非抽象方法,子类可以直接继承使用。接口中定义都是抽象法,需要子类去实现抽象方法。 抽象类中的成员访问权限可以自己定义,而接口中的成员访问权限是固定的,只能是public
发表于 2016-09-05 16:38:57 回复(0)
抽象类的关键词是abstract
发表于 2016-09-30 16:17:38 回复(0)
接口描述了系统所具有的功能
发表于 2020-02-04 16:28:33 回复(0)

抽象类中有构造方法,接口中没有。

抽象类中既可以有抽象方法也可以有非抽象方法。

抽象类中的成员变量既可以为常量也可以为变量,接口中的成员变量均为常量都用public static final修饰。

编辑于 2019-12-23 12:07:18 回复(0)
说准确点,抽象类是继承,接口是实现,抽象类只能单继承,接口可以多实现或者接口与接口之间多继承,类继承抽象类或者实现接口时,可以不重写两者的全部方法,但是该类必须得是抽象的,接口中定义的变量默认是最终的,而抽象方法定义的变量可以是非最终
发表于 2019-12-09 11:42:48 回复(0)
java 里面抽象类是类。java不支持多继承。所以只能继承一个抽象类。但是可以实现多接口。接口里面的方法默认全是抽象的。而抽象类里面可以有非抽象的方法。接口里面的变量默认是final的。而抽象类没有这规则
编辑于 2018-02-28 17:03:34 回复(0)
一个用在代码重构,一个是通讯契约。
发表于 2016-10-19 00:54:32 回复(0)
接口是完全抽象的,无法被实例化,其实例变量均被标记为final,方法均被标记为public,如果一个类实现了一个接口就必须实现接口里所有的方法,但一个抽象类实现了接口却不需要实现所有的方法,可以放在子类中实现。 抽象类是部分抽象的,里面既有抽象方法,也有非抽象方法,其实例变量可为任何类型,方法也可有非实例方法。一般情况下抽象类不能被实例化,但当抽象类中存在main方法时,可以被调用。
发表于 2016-05-08 23:55:56 回复(0)
接口中所有的方法隐含的都是抽象的。而抽象类则可以同时包含抽象和非抽象的方法。 Java接口中声明的变量默认都是final的。抽象类可以包含非final的变量。 Java接口中的成员函数默认是public的。抽象类的成员函数可以是private,protected或者是public。 接口是绝对抽象的,不可以被实例化。抽象类也不可以被实例化,但是,如果它包含main方法的话是可以被调用的。 类可以实现很多个接口,但是只能继承一个抽象类 类可以不实现抽象类和接口声明的所有方法,当然,在这种情况下,类也必须得声明成是抽象的。 抽象类可以在不提供接口方法实现的情况下实现接口。
发表于 2016-03-13 10:49:01 回复(0)
  1. 接口中所有方法隐含的都是抽象的。而抽象类则可有抽象和非抽象的方法。
  2. 接口中声明的变量默认都是final的。抽象类可以包含非final的变量。
  3. 类可以实现很多接口。但只能继承一个抽象类。
  4. 实现接口,必须实现接口的所有方法。继承抽象类可仅实现部分抽象方法。
发表于 2016-03-08 22:54:53 回复(2)
1.接口的方法默认是public,所有方法在接口中不能有实现,抽象类可以有非抽象的方法
2.接口中的实例变量默认是final类型的,而抽象类中则不一定
3.一个类可以实现多个接口,但最多只能实现一个抽象类
4.一个类实现接口的话要实现接口的所有方法,而抽象类不一定
5.接口不能用new实例化,但可以声明,但是必须引用一个实现该接口的对象
发表于 2015-12-02 16:57:27 回复(7)
1.先说对这两个概念的理解 我们先说抽象类,其实抽象类的设计理念是“is-a”关系,就是说它更关心的是被抽象的这些个对象是什么,比如说藏獒,贵宾,哈士奇,我们要给他们写抽象类,那抽象出来这个类就是狗狗类,无论什么品种的狗,都是狗狗。 再说说接口,接口的设计理念是“has-a”关系,它关心的能做什么,比如说你可以写一个接口,里面有吠()这个方法,再写一个接口,里面有跑()这个方法,那么你可以让狗狗类实现这两个方法,让狗狗拥有这两项功能。而你可以发现,人类,喵类也都可以实现整个跑这个接口来拥有这项功能。 所以在java中,类的单继承多实现的概念就好理解了,狗狗只能继承狗狗这个类,不可能让它去继承人类或者喵类,但能实现n多个接口,跑、跳、吠、打滚。 在应用场景中,抽象类用于同类事物,而接口多是可以横跨很多个类。 2.他们有哪些具体区别呢? 1)抽象类则可以包含普通方法,接口中的普通方法默认为抽象方法。 2)抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是 public static final 类型的,并且必须赋值,否则通不过编译。 3)接口不能包含构造器,抽象类可以包含构造器,抽象类里的构造器并不是用于创建对象,而是让其子类调用这些构造器来完成属于抽象类的初始化操作。 4)接口里不能包含初始化块,但抽象类里完全可以包含初始化块。 5)就是我们所说的单继承多实现了。 最后,送上我在一本书上看到的特别绕的三句话,接口可以继承接口,抽象类可以实现接口,抽象类可以继承具体类。
发表于 2020-11-18 09:08:39 回复(0)
发表于 2022-01-29 15:17:08 回复(0)