抽象类和接口的区别

一、抽象类

1、什么是抽象类?

答:类和类之间具有共同特征,将这些共同特征提取出来,形成抽象类。

2、类可以实例化对象吗?

答:由于类本身不存在,因此抽象类无法创建对象。使用抽象类时,写代码可以使用多态(父类型引用指向子类型对象),这里即抽象类作为父类。

3、抽象类中可以包含什么?

① 一般方法、静态方法和抽象方法,且抽象方法必须在抽象类中

静态变量和成员变量

abstract class AbstractTest01{
	int a;								// 成员变量
	static int b;						// 静态变量
    public abstract void doSome();      // 抽象方法(只有行为的概念,没有具体的行为实现)
    public void doAnother(){			// 普通方法
    	......
	}
    public static void doOther(){       // 静态方法
    	......
    }
}

   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

在这里插入图片描述

4、final 和 abstract 不能联合使用,因为 final 修饰的类无法被继承。

5、抽象类有构造方法,这个构造方法可以供子类使用。

Exp:子类继承抽象类,子类的无参构造第一行默认是 “super()”,默认调用抽象类的无参构造方法。

在这里插入图片描述

二、接口

1、什么是接口?

答:接口可看作特殊的抽象类(接口是完全抽象,抽象类是半抽象)。接口也是一种“引用数据类型”,编译后也是一个 .class 字节码文件。

2、接口可以实例化对象吗?

答:由于接口是抽象类的特例,因此接口中也无法实例化和创建对象。使用接口时,写代码可以使用多态(父类型引用指向子类型对象),这里即接口作为父类。

3、接口中可以包含什么?

答:只能包含抽象方法和常量。

接口中的方法默认是 public abstract 类型,可省略; 接口中的变量默认是 public static final 类型,可省略。

4、当一个非抽象类实现接口,必须将接口中所有的抽象方法全部重写。

5、接口支持多继承,一个接口可以继承多个接口,一个类可以同时实现多个接口。
在这里插入图片描述

三、抽象类和接口区别

1、抽象类中有构造方法,接口中无构造方法。
在这里插入图片描述
2、接口和接口之间支持多继承,类和类之间只能单继承。

3、一个类可以实现多个接口,但只能继承一个抽象类。

四、何时用抽象类?何时用接口?

* 抽象类一般是对“特征”的抽象。
* 接口一般是对“行为”的抽象。

   
   
  • 1
  • 2

抽象类表示它是什么,接口表示它能做什么。举一个例子,一个 Person,他有眼睛、肤色,这些描述一个人的特征可以定义在抽象类中,而一个人的行为如打篮球,所以这些可以定义在接口中。
在这里插入图片描述
在这里插入图片描述
有个俄罗斯人,他会打篮球,这个类可以这样写:
在这里插入图片描述
从编程角度看:

1、抽象类适合用来定义某个领域的固有属性,也就是本质,接口适合用来定义某个领域的扩展功能。

2、当需要为一些类提供公共的实现代码时,应优先考虑抽象类。因为抽象类中的非抽象方法可以被子类继承下来,使实现功能的代码更简单。

3、当注重代码的扩展性跟可维护性时,应当优先采用接口。①接口与实现它的类之间可以不存在任何层次关系,接口可以实现毫不相关类的相同行为,比抽象类的使用更加方便灵活;②接口只关心对象之间的交互的方法,而不关心对象所对应的具体类。接口是程序之间的一个协议,比抽象类的使用更安全、清晰。一般使用接口的情况更多。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值