浅谈抽象类和接口的区别

抽象类

定义:这种没有实际工作的方法, 我们可以把它设计成一个 抽象方法(abstract method), 包含抽象方法的类我们称为 抽象类(abstract class)。

abstract class Shape {
	abstract public void draw();
}  

在 draw 方法前加上 abstract 关键字, 表示这是一个抽象方法. 同时抽象方法没有方法体(没有 { }, 不能执行具体代码).

对于包含抽象方法的类, 必须加上 abstract 关键字表示这是一个抽象类

注意事项

1.抽象类不能被实例化,抽象类和抽象方法必须被abstract修饰

2.抽象类中的抽象方法(其前有abstract修饰)不能用private、static、synchronized、native访问修饰符修饰。

3.抽象类中可以包含其他的非抽象方法,也可以包含字段。这个非抽象方法和普通方法的规则都是一样的, 可以被重写,也可以被子类直接调用

抽象类的好处:

抽象类存在的最大意义就是被继承

抽象类本身不能被实例化,要想使用只能创建该抽象类的子类,让子类重写抽象类中的抽象方法。

多了一重编译器的校验: 实际工作不应该由父类完成, 而应由子类完成. 那么此时如果不小心误用成父类了,使用普通类编译器是不会报错的. 但是父类是抽象类就会在实例化的时候提示错误, 让我们尽早发现问题 。

接口

接口是抽象类的更进一步. 抽象类中还可以包含非抽象方法, 和字段。而接口中包含的方法都是抽象方法, 字段只能包含静态常量

interface IShape {
	void draw();
}
class Cycle implements IShape {
	@Override
	public void draw() {
		System.out.println("○");
	}
}
public class Test {
	public static void main(String[] args) {
		IShape shape = new Rect();
		shape.draw();
	}
}  

使用 interface 定义一个接口

接口中的方法一定是抽象方法, 因此可以省略 abstract,接口中的方法一定是 public, 因此可以省略 public,Cycle 使用 implements 继承接口. 此时表达的含义不再是 “扩展”, 而是 “实现”

1.在接口中只有方法的声明,没有方法体。

2.在接口中只有常量,因为定义的变量,在编译的时候都会默认加上public static final

3.接口中没有构造方法,也不能实例化接口的对象。(所以接口不能继承类)

4.接口可以实现多继承 ,一个类可以实现一个或多个接口,实现接口使用implements关键字

5.接口中定义的方法都需要有实现类来实现,如果实现类不能实现接口中的所有方法则实现类定义为抽象类。

6,接口可以继承接口,用extends

注意:如果要继承父类,继承父类必须在实现接口之前,即extends关键字必须在implements关键字前

接口和抽象类的区别

核心区别:

抽象类中可以包含普通方法和普通字段, 这样的普通方法和字段可以被子类直接使用(不必重写),

接口中不能包含普通方法, 子类必须重写所有的抽象方法 。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值