暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

final关键字

哈特费尔德的思考 2021-09-17
350

1.final的概念

final是java语言中的一个关键字。
final表示:最终的,不可变的。
final控制不了能不能调用的问题。
final修饰的表示最后的,不能变的,不能改的。


2.final修饰的变量

final修饰的局部变量,一旦赋值,不能重新赋值。


3.final修饰的方法

final修饰的方法无法被覆盖,被重写。
B类继承A类,相当于对A类的功能进行扩展。如果不希望别人对A类进行扩展,可以对A类加final关键字,这样的话A类就无法继承了。
SUN公司java源码中的String类是一个被final修饰的类,无法被继承


4.final修饰的类

final修饰的类无法继承。
/*
final
1、final是java语言中的一个关键字。


2、final表示:
最终的,不可变的。


3、final修饰的变量?
final修饰的局部变量,一旦赋值,不能重新赋值。


4、final修饰的方法?
final修饰的方法无法被覆盖,被重写。


5、final修饰的类?
final修饰的类无法继承。


6、final控制不了能不能调用的问题。final管的是啥?
final修饰的表示最后的,不能变的,不能改的。


重点【精辟:final修饰的变量,只能赋一次值。】
*/
public class FinalTest01{
public static void main(String[] args){
// 局部变量
int i = 100;
i = 200;


// 局部变量
final int k = 100;
// 重新赋值
//错误: 无法为最终变量k分配值
//k = 300;


final int m;
// 第一次赋值
m = 200;
// 重新赋值
// 编译报错。错误: 可能已分配变量m
//m = 300;
}
}




final class A{ // A没有子孙
}


// B类继承A类,相当于对A类的功能进行扩展。如果你不希望别人对A类进行扩展。
// 你可以对A类加final关键字,这样的话A类就无法继承了。
// 错误: 无法从最终A进行继承
/*
class B extends A{
}
*/


// 错误: 无法从最终String进行继承
/*
class MyString extends String{
}
*/


class C{
public final void doSome(){
System.out.println("C's doSome...");
}
}


class D extends C{
/*
public void doSome(){
System.out.println("D's doSome...");
}
*/


public final void doOther(){

}


public static void main(String[] args){
// 多态
C c = new D();
//c.doOther(); // 报错了,因为编译器报错,编译器认为c是C类,c类中没有doOther()方法

// 调用子类特有的方法时,需要向下转型。
if(c instanceof D){// c指向的对象如果确实是一个D类型。
D d1 = (D)c;
d1.doOther();
}


// 不用多态可以。
D d = new D();
d.doOther();

//错误: D中的doSome()无法覆盖C中的doSome()
//d.doSome();
}
}


文章转载自哈特费尔德的思考,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论