Java基础

Java学习之final关键字抽象类及接口

final关键字

final 关键字是用于修饰类,变量和方法,它有"这是无法改变的"或者"最终"的含义.
特点
1.final 修饰的类不能被继承.即不能有子类.
2.final 修饰的方法不能被子类重写.老老实实继承,不允许做任何篡改.
3.final 修饰的变量(成员变量和局部变量)是常量,由于常量在运行期间不允许再发生改变,所以常量在声明时没有默认值,这就要求程序在声明常量时必须指定该常量的值.

由于final修饰的变量是常量,我们开发中为了和变量名有区别,因此所有的被final修饰的变量名统一大写。

抽象类

什么是抽象类?
我们在java开发中使用,某个类描述行为的时候,如果这个类中在描述这个行为时,只知道该类具有此行为,但无法清楚描述该行为的具体实现代码,此时就可以使用抽象方法来描述该行为,由于类中有抽象的方法,此类必须定义为抽象类。

注意:
1.当一个类继承某个抽象类,此时该子类需要把抽象类中的所有抽象方法全部进行重写, 给出具体的实现方法体。如果子类没有把父类中的抽象方法全部重写完,或者根本就没有重写,此时这个子类也必须是一个抽象类。抽象类是不可以被实例化的.因此子类如果想被实例化,就必须全部重写父类的抽象方法.

2.在Java中使用类,一般我们都会去先查阅这个类继承体系顶层父类中的功能,在继承体系的顶层,描述的功能都是不具体的功能,都是抽象类. 也就是说我们是无法直接调用这些不具体的功能,但是我们知道了该类具备了哪些共性的方法. 因此开发中的做法是,创建顶层这个父类的引用,然后创建一个子类对象,随后就可以使用这个父类的引用,调用我们在顶层看到的功能了。

抽象类的特点
1、抽象类一定是父类吗?
是的,因为抽象类是不断向上抽取而来的. 一定是父类,但不一定是顶层父类。
抽象类中通常都有抽象方法,而抽象类中的抽象方法要求必须由子类来重写(由具体的子类来实现其中的方法体)。
子类的主要作用 : 重写抽象类中的全部抽象方法。

2、抽象类可以继承其他类吗?
抽象类还是一个类,因此它必须具备类的继承特点。它可以有父类。

3、由于抽象类不能实例化对象,那么请问抽象类是否有构造方法 ?
有构造方法。但是这个类不能创建对象。因为抽象类一定有子类,而创建子类对象的时候,在子类的构造方法中有super语句会找自己父类的构造方法进行初始化动作。所以抽象类的构造方法是用来给子类进行初始化的.

4、抽象类中可以没有抽象方法吗?
可以。它的存在意义就是不让外界创建当前这个类的对象。这样的类符合的设计模式中的 适配器模式

5、抽象关键字不能和哪些关键字共存?
private :父类中私有的成员变量和方法子类是不知道的,因此使用private 和abstract关键字一起修饰方法,导致子类根本无法知道父类中有这个抽象方法,从而子类无法实现重写。
static:如果使用static和abstract关键字一起修饰抽象方法,导致这个方法使用类名直接调用,从而无需创建对象, 而抽象方法是没有具体的方法实现体的.因此调用抽象方法是没有任何意义的。
final :final修饰的方法子类是无法重写的,而abstract修饰的抽象方法,目的就是为了要求子类进行重写。

6、抽象类何时使用
当描述事物体系,一般在描述所有体系中最共性的内容时,通常是只知道体系的共性功能,却无法书写具体功能体,这时会使用抽象方法表示,那么这个类一定要使用抽象类表示。

抽象类. 看顶层, 创建子类. 用顶层的功能. (提高了代码的使用灵活性.)

接口

什么是接口?
在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。

注意:
1.抽象类中可以有抽象方法, 但同时也可以包含非抽象方法
2.如果一个抽象类中所有的方法都是抽象的,则可以将这个类用另外一种方式来定义, 即接口.
3. 接口中定义的方法和变量都包含一些默认修饰符.接口中定义的方法默认使用 “public abstract” 来修饰,即抽象方法.接口中变量默认使用 “public static final” 来修饰 .使用类名直接访问. 接口中的变量,都是常量。因此接口中的变量名一般都会全部大写。默认修饰符可以省略不写.
4. 由于接口中的方法都是抽象方法,因此不能通过实例化对象的方式来调用接口中的方法.此时需要定义一个类,并使用 implements 关键字实现接口中所有的方法.
5. 一个类在继承另一个类的同时还可以实现接口,此时 extends 关键字必须位于 implements 关键字之前.

抽象类和接口的区别

接口和抽象类都是描述事物的行为并且也可以定义常量和成员属性用于存储数据,并且描述的行为一般都是抽象的。需要子类或实现类对这些行为进行实现或重写。

  1. 抽象类和接口都可以有 abstract 方法.
  2. 接口中可以有常量,不能有变量,而抽象类中既可以有常量也可以有变量.
  3. 抽象类中可以有非 abstract 方法.接口不可以.
  4. 抽象类是继承体系的一员, 拥有类创建对象的构造方法, 但是接口中不存在 构造方法.

总结 : 抽象类依然是属于类继承体系中的一员。而接口则是类继承体系之外的事物描述.也可称为事物的扩展功能。
抽象类 : 表示一类事物的共性属性和行为.
接口 : 对事物的行为进行功能的扩展.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值