抽象类与接口知识点

本文探讨了Java中的抽象类和接口的区别与使用。抽象类作为所有类的父类,不能实例化,子类必须覆写其抽象方法。接口是更纯粹的抽象,只有全局常量和抽象方法,子类可以通过implements实现接口并覆写抽象方法。接口支持多实现,抽象类支持单继承。抽象类是子类共性的提取,接口是规范的定义,后者更加灵活。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JDK种三大特殊类:Object  string  包装类

其中Object是java中所有类的父类,不需要使用extends明确写出继承。只要是class声明的类,就都有一个父类Object。

1  因此Object是参数的最高统一化,所有类的对象都可以通过Object引用进行接收

2 Object中的所有方法都可以在子类中进行覆写。


我们的子类可以选择覆写或者不覆写父类中的方法,在编译运行是不会出错的,但是要是想要强制子类覆写父类中的方法,则需要使用到抽象类和抽象方法。

抽象类:使用abstract定义,抽象类只是普通类的超集,只是比普通类躲了一些抽象方法而已。普通类具有的,抽象类也有。

同样的使用abstract定义抽象方法,抽象方法没有方法体,只有方法声明。(没有方法体就看有没有 { } )。除了abstract方法以外还有本地方法native也没有方法体。 没有加访问修饰符时,抽象方法默认为包权限。

 

 抽象类和抽象方法的使用原则:

1 抽象类不能实例化对象,即使抽象类中没有任何抽象方法,也无法直接实例化对象。

只能通过向上转型进行赋值(Cycle为子类)

2 抽象类的子类如果是普通类则必须覆写其父类抽象类的方法————强制覆写,保证多态的运行

如果是抽象类则不覆写也行。

3 abstract的使用  不能与private / final  /static 一起使用

4 抽象类中仍然可以定义普通类中的构造方法和普通方法,也仍然满足对象的实例化流程。


接口:java中三大引用数据类型之一,可以看作是多个类的共同规范。

使用关键字 interface定义接口,JDK8之前,接口中只有全局常量和抽象方法,他是更加纯粹的抽象类。

子类使用implements实现接口,子类若是普通类,则必须覆写父类接口中所有的抽象方法。

 一般来说,子类名称中用Impl结尾,表示是接口的实现子类。接口的子类没有 is  a原则。

注意点:

1 接口是更纯粹的抽象类,因此接口中只有全局常量和抽象方法,没有构造方法和普通方法,因此其无法直接实例化对象,只能通过具体子类向上转型来被父类引用接收。

2 接口的子类是可以允许多实现的,一个类可以使用多个implements实现多个父接口。(避免了单继承局限)。

个人的理解:

抽象类的父类提取的共性是其子类都共有的,可以理解为父类蔬菜 ,子类为胡萝卜,菠菜等等。但是接口只是给出一个规范,并不是包含子类,可以理解为绿色蔬菜/有机蔬菜,当你满足绿色蔬菜/有机蔬菜的标准你就是绿色蔬菜或者有机蔬菜,但是这两个只是一种规范定义出来的东西,并非现实中真正存在的。如果说最大的区别就是抽象类是先存在子类然后把这些子类的共性提取为父类,而接口是先创建规则,依据规则来放子类,这种规则是人为规定的,可修改的,但是抽象类中的父类只是提取的共性,是不可修改的,你总不能说我把胡萝卜踢出蔬菜类,原因是它不满足什么什么条件吧。同样的,上文中的注意点2也证实了这一点,在抽象类中你只能继承一个父类,因为你不可能同时又是蔬菜又是肉类,但是你可以同时是有机蔬菜和绿色蔬菜,因为你只要满足它的规则,那么你就可以继承,所以可以实现多继承。相反的,如果你是蔬菜那么你就是蔬菜,不存在什么你满足什么什么条件你才是蔬菜。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

花落尽舞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值