**Java中的抽象类,抽象方法与接口(阅读文档后的个人理解)**

本文分享了作者在阅读文档后对Java中抽象类、抽象方法和接口的理解,重点探讨了它们在后端开发中的应用和区别。
摘要由CSDN通过智能技术生成

Java中的抽象类,抽象方法与接口(阅读文档后的个人理解)

抽象类与抽象方法:
	抽象方法以 abstract 声明,并且一个抽象方法只有声明,不能有任何具体的实现。如:
		abstract void fun();
	而如果一个类中有存在抽象方法,他就必须是抽象类,且必须在类前用 abstract 声明。(如果一个类中有抽象方法,那么这个方法就只能被子类实现,而类方法是包含在类中的,所以有抽象方法,而类不是抽象类就会导致矛盾)
	一个抽象类不一定要有抽象方法,但实质上没有抽象方法的抽象类是没有意义的,只能说这属于定义。
	抽象方法只能声明为 public 或者 protect,因为抽象方法就是为继承实现而生的,所以如果将它定义为private显然与理念矛盾。缺省情况为 public。
	抽象类不能用于创建对象,可能因为抽象类中有未实现的抽象方法,当然在极端情况下也可能没有,不过可能为了方便所以这样限制。在还有未实现的方法的情况下创建实例显然不可取。
	如果一个类继承于抽象类,而没有实现所有父类的抽象方法,那么这个类也必须定义为抽象类,因为继承导致子类中还有未实现的抽象方法。与前面意思一样
	抽象类中也可以包含普通方法跟普通成员变量。
	除以上,抽象类也跟普通类一样。
	
接口:
	接口以 interface 声明
	接口可以包含变量与方法,并且变量会被隐式指定为 
		public static final
	因为首先接口是最高层次的抽象,接口所有方法都必须被子类实现。
	而接口实质上相当于一种协议,是所有实现这个接口的类必须遵守的,包括接口的方法也是不可改变的。所以接口内成员变量必须声明为final,否则所有实现该接口的类都有权限去修改接口成员变量的值显然是不行的,协议是固定的,必须被所有实现类同时遵守。
	而之所以必须声明为 static, 是因为假如 A,B接口都有成员变量 V(不是static声明),V就会作为全局变量保存在全局数据区且能在文件之间共享,那么如果C 同时实现A,B接口,在C中调用V的话就不知道 C调用的是 A中的V还是 B中的V。
	在这里需要了解到,成员变量实质就是全局变量保存在全局数据区,如果不加static声明实质上就是能在文件之间共享的全局变量,而加上static声明就是只能作用于当前文件的全局变量。所以加上static就只能通过A.V或者B.V来调用V,解决了矛盾。
	接口内的方法必须为抽象方法,并且在一般情况下不在接口定义变量。
抽象类与接口对比:
	1. 抽象类可以有实现的方法,但接口只能包含抽象方法
	2. 抽象类的成员变量可以是多种类型,而接口成员变量只能是 public static final(因为一个类可以实现多个接口,前面有详细解释)
	3. 接口中不能有静态代码块与静态方法(因为静态方法必须被实现,而接口中不能有任何已经实现的方法,其实仔细想想,因为即使你写了静态方法在里面,接口文件也不能直接被运行,所以静态方法也就永远不可能被调用,那这样显然写了静态方法也毫无意义),这里需要了解,静态方法是独立于类的方法,因为java是面向对象的,类方法都是依托于类来实现的,而静态方法打破了这种依赖,相当于c语言里面的直接实现,不需要通过创建任何类实例来实现静态方法,运行速度也就更快。
	4. 一个类只能继承一个抽象类,但是却可以同时实现多个接口。

从设计层面而言的个人理解是:
	抽象类是对一种事物的抽象,就像是一类事物基础的模板,相当于多个类的共同特征,是基础。如果A是一个抽象类,那么所有继承A的子类都是一定是A的种类,比如A如果是鸟,那么继承A类的可以是各种各样不同的鸟,他们一定有的共同特性就写在A中,反言之,凡是继承A类的可实例化的类就一定有这些特性。
	而接口是对行为的抽象,如果T是一个接口,那么如果A类存在T行为,那么他就可以实现T接口。当然,A类可以有多重不同的行为,所以A可以同时实现不同的接口。接口是一种规范。
	总而言之,接口强调能做什么。抽象类强调是什么。
	通过阅读文档,我感觉是:之所以需要有抽象类跟接口,可以理解成抽象类中本身就包含各种各样的接口(抽象方法),但是一个抽象类中的方法是捆绑的,也就是说所有继承某一抽象类的子类就必须实现所有的父类抽象方法,这样就限制了java编码的灵活性,因此,引入接口就相当于制定一个轻量级的抽象方法容器,解决了java只能单继承的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值