JAVA中抽象类与接口介绍及其异同

抽象类

简单地说,就是被 abstract 修饰的类就是抽象类。

关于abstract修饰符:
1)被abstract修饰的类为抽象类,该类不能有对象,即不能通过new来进行实例化。
2)被abstract修饰的方法称为抽象方法,该方法不能有方法体,不能实现任何具体的功能,即一个空的方法,连{}都不能有。
3)有抽象方法的类一定是抽象类,抽象类内的方法不一定都是抽象方法。

那么,可能就会有疑问了,既然抽象类不能new一个对象,而且其中的方法也是空方法,那这个抽象类有什么用呢?又怎么去使用呢?
抽象类一定要有其他的类去继承这个抽象类,如果没有类继承,那么这个抽象类就真的失去了意义了。与此同时,当一个类继承了这个抽象类后,一定要重写其中所有的抽象方法。

比如定义一个抽象的学生类:

//抽象学生类
public  abstract class Student {
//三个抽象方法:学习、吃饭、睡觉
	public abstract void study();
	public abstract void eat();
	public abstract void sleep();
	public abstract void test();
}

再定义一个大学生类去继承这个抽象的学生类,并重写其所有的抽象方法:

public class CollegeSTU  extends Student{

	@Override
	public void study() {
		// TODO Auto-generated method stub
		System.out.println("大学生在学习");
	}

	@Override
	public void eat() {
		// TODO Auto-generated method stub
		System.out.println("大学生在吃饭");
	}

	@Override
	public void sleep() {
		// TODO Auto-generated method stub
		System.out.println("大学生在睡觉");
	}

	@Override
	public void test() {};
}

这样便可以在大学生类中对其中的方法进行调用了。抽象类类似于一个模板,所有基层这个模板的子类都需要重写所有的抽象方法,即使在子类中没有用到该函数也要将其重写(如上例中的考试方法)。

接口(interface)

接口是抽象类的延伸,是一种特殊的抽象类。

关于接口:

1)接口中的方法是默认抽象的,因此也不能有具体的实现。
2)接口中的变量是默认static final 的,因此在接口中声明一个变量是必须赋值且在后续的使用中无法更改。
3)当一个类实现该接口时,也必须重写接口中定义的所有的抽象方法。
 

相同点

1)都必须重写所有的抽象方法。
2)二者都无法被实例化,也就是不能直接new一个对象。

不同点

1)关键字:继承抽象类的关键字是extends,实现接口的关键字是implements
2)变量:抽象类中对于变量可正常声明且后续使用中可更改;接口中声明一个变量是默认static final的,必须赋于初值且后续无法更改。
3)方法:抽象类中可以有非抽象的方法;接口中的方法一定都是抽象的。正是因为如此,在抽象类中可以实现部分方法,只要这个方法是非抽象的,但是由于接口中的方法一定是抽象的,因此接口中无法实现所有的方法。
4)构造方法:抽象类中可以有构造方法,接口中不能有构造方法。
5)具体使用中:子类继承抽象类时只能继承一个抽象类;而一个类实现接口时可以同时实现多个接口。
6)设计理念:抽象类为“A is B”,接口为“A has B”。因此,当你想了解某个事物的本质和根源时,使用抽象类;当你只想使用某个或某些功能时,使用接口。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值