首页 > 试题广场 >

请简述抽象类和接口的区别?以及何时用抽象类,何时用接口

[问答题]
请简述抽象类和接口的区别?以及何时用抽象类,何时用接口
抽象类:
  1. 可以定义构造器
  2. 有抽象方法和具体方法
  3. 抽象类的成员可以用private、默认、protected和public修饰
  4. 可以定义成员变量
  5. 有抽象方法必须被声明为抽象类,但抽象类未必要有抽象方法
  6. 抽象类可以包括静态方法
  7. 一个类只能继承一个抽象类
接口:
  1. 接口中不能定义构造器
  2. 方法全是抽象方法
  3. 接口中的成员只能用public修饰
  4. 接口中定义的成员变量全是常量
  5. 接口中不能有静态方法
  6. 一个类可以实现多个接口
用抽象类:需要在几个有联系的类之间共享代码
用借口:实现“多继承

发表于 2019-03-03 14:51:03 回复(1)
更多回答

参考答案

区别:
抽象类可以有构造函数,接口不可以有构造函数
抽象类中可以有普通成员变量,接口中没有普通成员变量,只能有常量
抽象类中的方法可以被static修饰,接口中的方法不可以被static修饰 ---> jdk 1.8 可以接口可以有static修饰的方法
抽象类中可以有普通方法和抽象方法,接口中的方法全是抽象方法 ---> jdk 1.8 接口中的方法还有default和static修饰的方法
一个类只能继承一个抽象类,接口可以被多实现,即一个类只能继承一个类,可以实现多个接口
何时使用
接口主要用于模块与模块之间的调用。主要用接口来实现多继承,因为java不支持类的多继承,只能用接口
抽象类主要用于当做基础类使用,即基类。如果想拥有一些方法,并且这些方法有默认实现,那么使用抽象类

所以参考答案不可全信
编辑于 2018-11-27 17:30:29 回复(0)
抽象类:使用abstract修饰类,里面可以包含着abstract修饰方法,也可以包含普通方法,里面可以包含变量,常量。
接口:使用interface定义,里面定义方法均为抽象方法默认为public abstract,里面定义的值均为常量, jdk1.8开始可以用@default注解给接口中抽象方法定义内容。

抽象类是对概念的抽象,接口则是对功能的抽象。因此何时使用,取决于从哪个角度来看待问题的,例如空调车这一概念,公共汽车集团可能会采用继承,对Bus进行集成,再在空调车内定义方法,而从厂商角度来看待问题的话,可能会将实现空调功能归为接口,Bus只要实现该功能接口就会成为空调车。
发表于 2019-02-19 14:30:06 回复(0)

相同点:都可以定义抽象方法并且被重写,都不可以实例化对象,都可以定义静态变量、方法。

区别:意义不同:抽象类是对类进行更高层次的抽象,而接口是对功能进行封装;

内容不同:抽象类中除抽象方法外,还可以定义实例变量、方法,静态变量、方法以及构造方法;而接口中规定仅定义静态常量、静态方法、抽象方法以及Default方法;

使用方式不同:抽象类作为父类被继承,接口需要实现;

应用场景不同:仅仅为了扩展功能,选用接口。如果除了功能,还需保存数据,选抽象类。

发表于 2023-03-08 15:27:10 回复(0)
抽象类在继承过程中子类重写抽象方法,一个子类只可以继承一个抽象类,而一个子类可以继承多个接口。
发表于 2019-08-12 19:53:23 回复(0)
抽象类中可以有构造方法,也可以成员方法和成员变量。在抽象类中不能有private抽象方法,但是可以有private修饰的成员变量。 interface中只能有抽象方法。不能有成员方法。接口中定义变量是public static final型
发表于 2019-03-31 11:40:36 回复(0)
区别:抽象类是对事物属性的抽象,接口是对行为的抽象;一个类只能继承一个抽象类,但可以实现多个接口;抽象类中可以包含非抽象方法,接口中的所有方法都必须是抽象的;抽象类中如果添加了非抽象方法,所有子类不需要作修改,接口如果添加了方法(该方法必然是抽象的),所有实现该接口的类都要作改动。
二者如何选择:1.如果要实现的类和该抽象类是同一类事物,则用继承抽象类的方法;不是同一类事物,就用接口;2.要设计较小的功能模块,用接口,要设计较大的功能单元,用抽象类;3.如果大部分方法都不确定,用接口抽象所有方法;如果只有少部分方法不确定,另有部分方法是确定的,用抽象类,实现部分确定的方法,抽象部分不确定的方法。
发表于 2018-11-17 01:33:27 回复(0)