抽象类与接口的比较

面试时经常会被问到抽象类与接口的区别,因此这里总结一下
可以从一下几个方面来考虑抽象类与接口的区别
1,组成方面
抽象类的组成可以有抽象方法,普通方法,常量,变量,构造方法,全局常量
接口的组成可以有抽象方法和全局常量
从上面可以看出,抽象类中可以有普通方法,常量,变量和构造方法,因此在抽象类中是
可以存在实现方法的,即有方法体的方法,抽象类中可以存在非抽象方法

例:
package com.racky.abs;
abstract class A{
//普通方法,有方法体,该方法不是抽象方法
public void print(){
System.out.println("ererer");
}

//抽象方法,无方法体
public abstract void fun();
}
接口中的方法都是抽象方法,没有方法体

例:
package com.racky.interf;

public interface A {

//接口中不能有private定义的常量
//private final int i=0;
public final int j=0;
public static final int x=0;// 全局常量

//接口中不能有private方法
//private void print();
//抽象方法
public void fun();
}

2,继承方面
子类通过extends继承抽象类,且一个子类只能继承一个抽象类,即单继承
子类通过implements实现接口,子类可以实现多个接口,因此可用于实现多继承
3,抽象类与接口的关系
一个抽象类可以实现多个接口,一个抽象类可以包含多个接口
一个接口不能继承抽象类,只能实现多个接口,一个接口中可以包含多个抽象类
例:抽象类中有接口
abstract class A{
public abstract void fun();
interface B{//内部接口
public void print();
}
}
例:接口中有抽象类
interface class A{
public abstract void fun();
abstract B{//内部抽象类
public abstract void print();
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值