Java

final关键字

2015-07-22  本文已影响78人  许宏川

final可以用于修饰属性、方法和类。我从大到小一一说明一下。

修饰类##

被final修饰的类无法被继承

新建立一个finalDemo项目,新建A、B、C三个类。其中B用final修饰,让C分别继承A和B,结果是C继承B时会报错。

public class A {

}
final public class B { //用final修饰的类,无法被继承

}
/*
报错!类B被final修饰了,无法继承
public class C extends B {
}
*/

public class C extends A {

}

修饰方法##

被final修饰的方法有两条规矩。

在类A添加一个show方法,用final修饰。在继承类A的类C里重写show方法,结果报错了,因为show方法被final修饰所以无法被重写。

public class A {
    //被final修饰的方法无法被重写
    protected final void show() {

    }

}
public class C extends A {

    /*
    报错!show()在父类A里被定义为final,无法被重写
    @Override
    protected void show() {
        super.show();
    }
    */
}

在类A添加以下构造方法将会报错。

/*
    报错!构造方法无法被定义为final
    public final A() {

    }
    */

修饰属性##

被final修饰的变量被赋值后无法再修改值,也就是说fianl变量只能被赋值一次。
用final修饰属性和两种情况讨论,一种是成员变量第二种是局部变量。

在类A里添加以下两个final成员变量,其中s1因为赋初始值所以报错。

    //final String s1; //报错!成员变量被final修饰必须赋初始值
    final String s2 = "赋了初始值就不会报错了";

在类A的show方法里添加成员final局部变量i,先声明不赋初始值程序正常。接着赋一个初始值10,程序正常。
再赋值为20,程序报错,因为final变量一旦初始化后则无法变更值。

   final int i; //可以不赋值,因为局部变量不会自动初始化
   i = 10; //第一次赋值
   //i = 20; //报错!因为final

本文代码下载百度网盘

上一篇 下一篇

猜你喜欢

热点阅读