抽象类和接口的区别?普通类和抽象类有哪些区别?抽象类能使用final 修饰吗?抽象类必须要有抽象方法吗?

Java是单继承和多实现

参数抽象类接口
声明用abstract关键字声明用interface关键字声明
实现子类使用extends关键字来继承抽象类,如果子类不是抽象类的话,它需要提供抽象类中所有声明方法的实现子类使用implements关键字来实现接口,它需要提供接口中所有声明方法的实现
构造器可以有构造器不能有构造器
访问修饰符抽象类中的方法可以任意访问修饰符接口方法默认修饰符是public,并且不允许定义为private或者protected
多继承一个类最多只能继承一个抽象类一个类可以实现多个接口
字段声明可以是任意的默认都是static和final的
实例化不能不能

都位于继承的顶端,用于被其他实现或继承

都包含抽象方法,其子类都必须覆写这些抽象方法

用来捕捉子类的通用特性

是抽象方法的集合

设计层面是对类的抽象,是一种模板设计是行为的抽象,是一种行为的规范
表示含义这个对象是什么(is a)这个对象能做什么(has)
侧重于描述事务侧重于定义功能
属性有普通属性,有静态属性(类属性)没有普通属性,只有静态属性,只能用public final static修饰
方法有普通方法,可以定义静态方法,也可以没有抽象方法没有方法体,默认使用public abstract修饰,不能定义静态方法

备注:Java8接口中引入默认方法和静态方法,以此来减少抽象类和接口之间的差异。

现在,可以为接口提供默认实现的方法了,并且不用强制子类来实现它。

接口和抽象类选择上,遵循这样的原则:

  • 行为模型应该总是通过接口而不是抽象类定义,所以通常是优先选用接口,尽量少用抽象类。
  • 选择抽象类:需要定义子类的行为,又要为子类提供通用的功能

普通类和抽象类有哪些区别?

区别抽象方法实例化
普通类不包含可以直接
抽象类包含不能

抽象类能使用final 修饰吗?

不能,

定义抽象类是让其他类继承的,如果定义为final 该类就不能被继承,这样彼此就会产生矛盾,所以final 不能修饰抽象类

抽象类必须要有抽象方法吗?

不需要,抽象类不一定非要有抽象方法。

abstract class Cat{
    public static void sayHi(){
        System. out. println("hi~");
    }
}

抽象类并没有抽象方法但完全可以正常运行

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值