关于java的final关键字介绍

protected

创新互联建站提供成都网站建设、网站设计、网页设计,高端网站设计一元广告等致力于企业网站建设与公司网站制作,十多年的网站开发和建站经验,助力企业信息化建设,成功案例突破超过千家,是您实现网站建设的好选择.

用来修饰 域,代表域的访问权限是:包权限 或者 不同包,但是是子类 ;

final 修饰常量

只要是该常量代入的计算式,在编译时期,就会被执行计算,以减轻运行时的负担。(只对基本数据类型的计算式,奏效)

final 修饰引用

这个有个地方需要说下,只是引用指向的对象,一经确定,就不再可以修改为指向别的对象。但是对象本身的属性,可以随意改变;

空白 final

就是被申明为final,但是未赋值的域 ,称为 空白final ;但是在使用之前,必须对其进行赋值;

这样就可以灵活的为其进行赋值,但是又保持了其不可更改的特性 ;

final 参数

就是方法参数,被final修饰了;跟final引用一样,无法更改其指向其他对象 ;

final 方法

被修饰的方法,只能被继承,但是不能被覆盖 ;被修饰为final的方法,其实是用了前期绑定,因此,在之前这样做是可以提升效率的;

final 类

final类不可被继承,final类的方法,都被隐式的设定为final,但是域,不是final的,可以根据自己的意愿来设定 ;

子父类中同名的 private 方法

public class test {

public static void main(String[] args) {

A a = new B();

a.haha(); ; // error

a.hehe(); ; // ok

}

}

class A{

private void haha(){

System.out.println(“A”);

}

public void hehe(){

System.out.println("A");

}

}

class B extends A{

private void haha(){

System.out.println(“B”);

}

}

它们之间是没有任何关系的;只是恰巧重名了 ;它们不能发生多态的行为;

方法的覆盖和向上转型,只针对方法是父类中能被子类继承的方法 ;因此,它们之间是没有向上转型、覆盖的说法的,也就没有多态的行为;

java中的前期绑定

我们都知道,java是采用后期绑定的;

但是,其实在java中有的地方,也采用可前期绑定;比如:static方法、final方法;这两种方法是前期绑定的;

由于private是隐式的final方法,因此,private方法也是前期绑定哦;

对了 构造器也是前期绑定,因为,其实,那个构造器是隐式的static方法 ;

免疫多态

域 和 静态方法 是不会产生多态行为的 ;

任何对 域 的操作,都是在 编译时期 完成的,此时编译器认为父类引用的就是父类的对象,因此,根本不存在多态的可行性;

静态方法,不存在多态的原因是:静态方法 是 前期绑定,此时编译器,也是单纯的认为,父类引用指向的就是父类对象,天真!

对于它们,是 编译看左边,运行看左边;

class A {

public int a = 1 ;

private void haha(){

System.out.println("A");

}无锡哪家医院妇科好 http://www.bhnfk.com/

public void hehe(){

System.out.println("A");

}

public static void aa(){

System.out.println("aa");

}

}

class B extends A{

public int a = 2 ;

private void haha(){

System.out.println(“B”);

}

public static void aa(){

System.out.println("bb");

}

}

public class test {

public static void main(String[] args) {

A a = new B();

System.out.println(a.a);

a.aa();

}

}

// output:1 aa ;都是输出父类的。


分享名称:关于java的final关键字介绍
网站URL:http://hbruida.cn/article/pjgghj.html