详细说明抽象类与接口的区别(后有代码说明)

一、抽象类与接口的区别

abstract classinterface
实例化不能实例化不能实例化
抽象类是一种继承关系,一个类只能使用一次继承关系一个类可以实现多个interface
数据成员抽象类可以有自己的数据成员静态的,不能被修改的,即必须是static final修饰的成员,但是,一般不在这里定义
方法可以存在私有的,非abstract的方法,且必须实现不能有私有的方法,默认的是public abstract类型
变量可以存在私有的,变量有默认的类型,其值可以在子类中重新定义,也可以重新赋值不可以存在私有的,默认是public static final 类型,且必须给其初值,实现类中不能重新定义,不能改变其值
设计理念表示的是“is--a.....”的关系表示的是“like--a....的关系
实现需要继承,要用extends关键字需要实现,要用implements关键字

二、相同点

1.两者都是抽象类都不能被实例化

2.interface实现类以及abstract class的子类都必须啊要实现已经声明的抽象方法

三、不同点

1.interface需要实现,要用implements,而abstract class需要继承,要用extends。

2.一个类可以实现多个interface,但只能继承一个abstract class。

3.interface强调特定功能的实现,而abstract class强调所属关系

4.尽管interface实现类以及abstract class的子类都必须要实现相应的抽象方法,但是两者的实现形式有所不同

interface中的每一个方法都是抽象方法,都只是声明的(declaration,没有方法体),实现类必须要实现

abstract class的子类可以有选择的实现相应的抽象方法。

 四、代码实现

public class AandItest extends AA implements BB,CC {
	//一个类可以单继承,多实现(抽象类单继承,接口多实现)

	
	public static void main(String[] args) {
		AandItest t=new AandItest();
		t.show();
	}
	@Override
	public void move() {
	}
	@Override
	public void test() {
	}
	@Override//如果子类是非抽象类,则抽象类父类的抽象方法必须重写
	void say() {
	}
}
abstract class AA{
	int a;
	public void show() {//非抽象方法在子类中可以选择性的实现
	}
	abstract void say();
}
interface BB{
//	int B=5;
//不可以存在私有的,默认是public static final 类型,
//且必须给其初值,实现类中不能重新定义,不能改变其值
	public static final int B = 4;
	void test();//不能有私有的方法,默认的是public abstract类型
}
interface CC{
	void move();//不能有私有的方法,默认的是public abstract类型
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值