Java学习笔记(四)

final可以修饰类、属性、方法。

 

当用final修饰类的时候,此类不可被继承,即final类没有子类。这样可以用final保证用户调用时动作的一致性,可以防止子类覆盖情况的发生。

 

当利用final修饰一个属性(变量)的时候,此时的属性成为常量。

JAVA利用final定义常量(注意在JAVA命名规范中常量需要全部字母都大写):

Final int AGE=10;

常量的地址不可改变,但在地址中保存的值(即对象的属性)是可以改变的。

 

Final可以配合static使用。  ?

Static final int age=10

 

JAVA中利用public static final的组合方式对常量进行标识(固定格式)。

 

对于在构造方法中利用final进行赋值的时候,此时在构造之前系统设置的默认值相对于构造方法失效。

 

 

常量(这里的常量指的是实例常量:即成员变量)赋值:

①在初始化的时候通过显式声明赋值。Final int x=3;

②在构造的时候赋值。

局部变量可以随时赋值。

 

利用final定义方法:这样的方法为一个不可覆盖的方法。

Public final void print(){};

为了保证方法的一致性(即不被改变),可将方法用final定义。

 

如果在父类中有final定义的方法,那么在子类中继承同一个方法。

 

如果一个方法前有修饰词private或static,则系统会自动在前面加上final。即private和static方法默认均为final方法。

 

注:final并不涉及继承,继承取决于类的修饰符是否为private、default、protected还是public。也就是说,是否继承取决于这个方法对于子类是否可见。

Abstract(抽象)可以修饰类、方法

如果将一个类设置为abstract,则此类必须被继承使用。此类不可生成对象,必须被继承使用。

Abstract可以将子类的共性最大限度的抽取出来,放在父类中,以提高程序的简洁性。

Abstract虽然不能生成对象,但是可以声明,作为编译时类型,但不能作为运行时类型。

Final和abstract永远不会同时出现。

 

当abstract用于修饰方法时,此时该方法为抽象方法,此时方法不需要实现,实现留给子类覆盖,子类覆盖该方法之后方法才能够生效。

 

注意比较:

private void print(){};此语句表示方法的空实现。

Abstract void print(); 此语句表示方法的抽象,无实现。

 

如果一个类中有一个抽象方法,那么这个类一定为一个抽象类。

反之,如果一个类为抽象类,那么其中可能有非抽象的方法。

 

如果让一个非抽象类继承一个含抽象方法的抽象类,则编译时会发生错误。因为当一个非抽象类继承一个抽象方法的时候,本着只有一个类中有一个抽象方法,那么这个类必须为抽象类的原则。这个类必须为抽象类,这与此类为非抽象冲突,所以报错。

 

所以子类的方法必须覆盖父类的抽象方法。方法才能够起作用。

为了实现多态,那么父类必须有定义。而父类并不实现,留给子类去实现。此时可将父类定义成abstract类。如果没有定义抽象的父类,那么编译会出现错误。

 

Abstract和static不能放在一起,否则便会出现错误。(这是因为static不可被覆盖,而abstract为了生效必须被覆盖。)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值