接口与抽象类的异同

接口与抽象类的异同

抽象类:

抽象类不能创建实例,它只能作为父类被继承。抽象类是从多个具体类中抽象出来的父类,它具有更高层次的抽象。从多个具有相同特征的类中抽象出一个抽象类,以这个抽象类作为其子类的模板,从而避免了子类的随意性。

(1) 抽象方法只作声明,而不包含实现,可以看成是没有实现体的虚方法

(2) 抽象类不能被实例化

(3) 抽象类可以但不是必须有抽象属性和抽象方法,但是一旦有了抽象方法,就一定要把这个类声明为抽象类

(4) 具体派生类必须覆盖基类的抽象方法

(5) 抽象派生类可以覆盖基类的抽象方法,也可以不覆盖。如果不覆盖,则其具体派生类必须覆盖它们

接口:

(1) 接口不能被实例化

(2) 接口只能包含方法声明

(3) 接口的成员包括方法、属性、索引器、事件

(4) 接口中不能包含常量、字段(域)、构造函数、析构函数、静态成员

A:相同点

(1)都可以被继承;

(2)都不能被实例化;

(3)都可以包含方法声明;

(4)派生类必须实现未实现的方法;

B:不同点

变量

构造方法

方法

抽象类

无限制

子类通过构造方法链接调用构造方法,抽象类不能用new操作进行实例化

无限制

接口

所有的必须是public static final

没有构造方法,接口不能用new操作符实例化

可以包含public的抽象方法、public的默认方法以及public的静态方法

1)一个类只可以继承一个类,但是可以有多个接口;

2)接口可以被多重实现,但是抽象类只可以被单一继承;

#)如果抽象类实现接口,则可以把接口中的方法映射到抽象类中作为抽象方法而不必实现,而在抽象了的子类中实现接口中的方法;

实现一个接口与抽象类的样例:

package work11;

/*接口*/

interface game {

public void playwhat() ;

}

/*抽象类*/

abstract class gamecenter{

public void fun(){//普通方法

System.out.println("我什么都有,但你只能玩lol ");

}

public abstract void playthis();//抽象方法

}

class pp extends gamecenter implements game{

public void playwhat() {

System.out.println("what I can play");

}

public void playthis() {

System.out.println("play lol!!");

}

}

public class jiukou_chouxiang {





public static void main(String[] args) {

pp shn =new pp();

shn.playwhat();

shn.playthis();

shn.fun();



}



}

输出:

what I can play

play lol!!

我什么都有,但你只能玩lol

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值