[JAVA]覆写中的关键字----super与final

                                                                                                                                                                                                                       

1..覆写

1.1定义:子类定义了和父类方法名称,参数类型及个数完全相同的方法,但被覆写不能够拥有比父类更严格的访问控制权限。

访问控制权限:public>default>private.。如果父类使用public,那么子类只能使用public。如果父类使用default,那么子类可以使用default和public。注:不写访问控制权默认default。但是如果父类使用private,子类使用public呢?

通过结果发现:如果父类使用private来封装方法,一旦封装了,那么这个方法就只有父类自己知道。此时子类定义了一个与该方法同名的方法,那么子类这个方法就是子类自己重新生成的,和父类没有任何关系。

1.2面试题:重载(overload)和覆写(override)的区别

1.3属性的覆写。

子类定义了与父类同名的属性,就称为属性的覆写。但一般在类中要求使用private来封装属性,一旦封装了,子类不知道父类有这个属性,也就不存在覆写的问题了,所以属性的覆写一般是没有任何意义的。

2.super关键字

2.1super的用法:

2.1.1用于构造方法**,表示调用父类构造方法。super(参数列表)

 a.当子类调用父类无参构造时super可写可不写,表示调用父类无参构造。实际上在子类的构造方法中隐含了一个语句Super();如果父类没有提供无参,就必须使用super()明确指明你要调用的父类构造方法。

b.当调用父类有参构造时, super(参数列表),必须要写,告诉编译器调用的是哪个有参构造。

注意:

        a.子类构造方法中调用父类构造必须是第一行语句。

        b.this和super不能同时调用。

2.1.2    用于普通方法  super.方法名(参数)

   用于在子类中明确调用父类被覆写的方法

2.1.3  super用于属性

super.属性名   表示调用父类中被覆写的属性(权限不能是private)

但是super用于属性的时候,属性的权限不可以是private,但我们99%的时候会使用private来声明属性,所有super用于属性一般不常用,仅限于了解。

2.1.4.this和super区别

先从以下代码开始看起:

通过以上代码发现super和this在使用上非常方便,但是俩者最大的区别是super是子类访问父类的操作,而this是本类的访问处理操作。

no

区别

this

super

1

概念

访问本类中的属性和方法

由子类访问父类中的属性和方法

2

查找范围

先查找本类,如果本类没有就调用父类

不查找本类而是直接调用父类定义

3

特殊

表示当前对象

3.final关键字----终结器

3.1final修饰类。(所以String类以及8大基本类型的封装。Integer)

当一个类被final修饰,表示这个类不能拥有子类这个类不允许被继承),一旦一个类被final修饰,该类的所有方法会默认加上final(成员变量不加final)。

3.2final修饰方法。

当一个方法被final修饰,表示该方法不允许被覆写。

 当一个方法被private修饰后相当于加了一个final关键字。

3.3 final修饰属性--常量

3.3.1final修饰普通数据类型的成员变量(主要用途)

被final修饰的常量必须在声明时初始化,否则就要在构造方法或者构造块中初始化。并且声明后的值无法改变。

final可以在主方法中定义变量,但是static不可以。

final变量----常量:值不能改变,每个对象都有自己的final变量,在声明时初始化。

static final --全局变量(推荐使用):(所有对象共享此变量,并且在类加载时初始化,效率较高,通过类名调用)

全局常量命名规范:多个单词全大写,单词间以下划线_分隔。

static初始化方式俩种:静态块初始化和声明初始化。

3.3.2  final修饰引用数据类型变量(值不能改变)

final Person per = new Person();
per引用的值不可以改变(在这里是个地址),后面的值可以改变。如果继续per = new Perosn();则会出错

猜你喜欢

转载自blog.csdn.net/hgelin/article/details/83720068