super和final关键字

一.super关键字

super关键字的使用

JAVA类中使用super来引用父类的属性或者方法,用this来引用当前对象,主要用法:

1.子类的构造函数默认第一行会默认调用父类的无参数构造函数

2.子类显示调用父类的构造函数

3.访问父类的属性和函数

输出结果:

注意:java中,Object类是有类的父类。

二final关键字

java中的常量与变量,常量是程序运行过程中其值不能改变,变量正好与之相反,变量是用于存储可变数据的容器。谈到常量,第一时间想起的是String类,Java中的String类就是一个final类。

1.为什么设计final?

在程序设计过程中,有时候我们希望某些数据不允许别改变,某些类不允许被继承。这个时候final就出现了。fianl是一个java关键字,意味着不可修改。其主要作用是两个:安全和效率。在java中final可以修饰类,方法和属性。常量细分为:编译期常量,永远不可改变。运行期初始化时,我们希望它不会被改变。对于编译期常量,它在类加载的过程就已经完成了初始化,所以当类加载完成后是不可更改的,有些变量,我们希望它可以根据对象的不同而表现不同,但同时又不希望它被改变,这个时候我们就可以使用运行期常量。对于运行期常量,它既可是基本数据类型,也可是引用数据类型。基本数据类型不可变的是其内容,而引用数据类型不可变的是其引用,引用所指定的对象内容是可变的。

输出结果是:

为什么会有上面的区别?首先看下反编译的代码

可以看出,编译器对final变量的处理与非final变量的区别。同时str1+"world"虚拟机在运行的时候,实际上String str4 = new StringBulider(str1).append.("world").toString().因此str4和str3指向对象的地址不同,即两者值不同。

2.final的用法

(1).修饰类

当用final修饰一个类时,表明这个类不能被继承。也就是说,如果一个类你永远不会让他被继承,就可以用final进行修饰。final类中的成员变量可以根据需要设为final,但是要注意final类中的所有成员方法都会被隐式地指定为final方法。

(2).修饰方法

父类的final方法是不能被子类所覆盖的,也就是说子类是不能够存在和父类一模一样的方法的。使用final方法的原因有两个。第一个原因是把方法锁定,以防任何继承类修改它的含义;第二个原因是效率

注:类的private方法会隐式地被指定为final方法。

(3).修饰变量

对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。

3.final的注意点

  •  当用final作用于类的成员变量时,成员变量(注意是类的成员变量,局部变量只需要保证在使用之前被初始化赋值即可)必须在定义时或者构造器中进行初始化赋值,而且final变量一旦被始化赋值之后,就不能再被赋值了。
  •  引用变量被final修饰之后,虽然不能再指向其他对象,但是它指向的对象的内容是可变的
  •  很多时候会容易把static和final关键字混淆,static作用于成员变量用来表示只保存一份副本,而final的作用是用来保证变量不可变

原文地址:https://www.cnblogs.com/liupiao/p/9240032.html

时间: 2024-10-14 20:46:21

super和final关键字的相关文章

JAVA笔记5__构造块、静态块/单例设计模式/继承/final关键字/super关键字

public class Main { { //构造块(在构造对象时调用,先于构造方法执行) System.out.println("我是构造块!"); } static{ //静态块(在类加载时执行,且只执行一次[在构造块前执行]eg:数据库连接) System.out.println("我是静态块!"); } public Main(){ System.out.println("我是构造方法!"); } public static void

java中static,super,final关键字辨析

1:static关键字 利:1)对对象的共享数据提供单独的空间存储. 2)修饰的方法可以直接被类名调用 弊:1)生命周期长. 2)访问出现限制(只能访问静态) 它可以有静态方法,静态类,静态变量 2:super关键字 1)使用super关键字调用父类的成员变量和成员方法. 格式1:super.成员变量 格式2:super.成员方法([参数1,参数2...]) 2)使用super关键字调用父类的构造方法 格式1:super([参数1,参数2...]) 总结:this代表当前对象(可以输出或地址).

super关键字、final关键字

super关键字 子类可以隐藏从父类继承的成员变量和方法,如果在子类想要使用被子类隐藏的成员变量和方法,就可以使用super关键字. 1.使用super 关键字调用父类的构造方法 子类不能继承父类的构造方法,因此子类如果想要使用父类的构造方法,必须在子类的构造方法中使用,并且必须使用关键字super来表示,而且必须是在子类的构造方法中的头一句使用. 2.使用super关键字操作被隐藏的成员变量和方法 比如 super.x super.play()就是用来访问调用被子类隐藏的成员变量x和方法pla

部分关键字--this/extends/super/static/final/abstract/访问权限总结

1.this关键字的作用 1)调用本类中的属性; 2)调用本类中的构造方法;且只能放首行,且必须留一个构造方法作为出口,即不能递归调用 3)表示当前对象; 2.匿名对象 直接new出来的对象,不创建变量名,且只能使用一次,通常作为方法的参数及返回值使用 3.继承 关键字:extends 通过继承,子类可以直接访问父类中非私有的属性及方法 只允许单继承,但是可以多层继承 子类对象的实例化过程是先调用父类的构造器,再调用子类的构造器; 子类程序调用方法,先调用子类方法,如果子类没有再调用父类中的方法

super关键字和final关键字

1,super关键字 1.1 在子类中,如果想调用父类中被覆盖的方法,可以使用super关键字: 1.2 如果要在子类中使用被父类隐藏的成员变量货方法,可以使用super关键字: 1.3 如果子类要使用父类的构造方法,需要使用super关键字,并且一定要在子类的构造方法中 语法如下: super([构造参数列表]) 参数说明: 构造参数列表:可选参数,根据调用构造方法的形参声明来填充. 2,final关键字 2.1 使用fianl定义的关键字不能有子类  : 2.2 使用fianl定义的方法不能

super 、static、final关键字加深记忆哦!还有父子类构造函数调用问题

使用super关键字可以直接调用父类中的构造方法.属性.普通方法 super调用父类构造方法的操作,与this调用构造方法一样,语句必须放在子类构造方法的首行 java中,构造函数不被继承,只是调用,如果父类有无参构造函数,子类可以写构造函数也可以不写构造函数,如果父类只有带参构造函数,那么子类必须也要写一个构造函数,并且调用父类构造函数在函数第一行.原因大致是因为,构造子类时都是需要先调用父类构造函数的,若父类没有了默认构造函数,子类声明调用自己的构造函数时就有问题了,所以此时(父类只有带参构

Java修饰符------>static、native和final以及super和this关键字

修饰符修饰符的作用是让被修饰的内容具备特定的功能,在程序中合理使用修饰符可以在语法和功能上实现很多需要的效果.Java 语言中的修饰符主要有 5个:static.final.native.abstract 和 synchronized.这里首先讲解 static.final 和 native 的作用. static 修饰符static 关键字的中文意思是静态的,该修饰符可以修饰成员变量,成员常量和成员方法.使用该关键字修饰的内容,在面向对象中 static 修饰的内容是隶属于类,而不是直接隶属于

java——super关键字、final关键字、抽象类、接口

super关键字: 当父类被重写之后,子类对象无法访问父类被重写的方法,super就是为了解决这个问题: 1.使用super关键字访问父类的成员变量和成员方法: super.成员变量 super.成员方法([参数1,...]) 2.使用super关键字访问父类的构造方法:(尽量在类中定义一个无参的构造方法,避免继承时出现错误). final关键字: 1.final关键字修饰的类不可被继承. 2.final关键字修饰的方法不可被重写. 3.java中被final修饰的变量称为常量,一旦被赋值,其值

重写、super关键字、final关键字、多态、子类型转换、抽象的初步了解

重写 含义 在Java中,子类可继承父类中的方法,而不需要重新编写相同的方法.但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写.方法重写又称方法覆盖. 重写与重载的异同点 相同点 都是作用在方法上 不同点 重载时作用在同一个类中,多个方法名相同,参数列表不同(方法签名不同)而采用的方式 重写是作用在不同类,该类继承于需要修改方法的父类. 区别: 重载是在同一个类中,方法名相同,参数列表不同 重写是作用在两个有继承关系的子类中,方法签名相同 需要重写的原因 在一