面向对象--继承--final关键字

final关键字

final关键字概述

程序示例

/*
        我们如果说父类的东西不想让子类去继承:
               可以使用private修饰

        由于继承方法中有一个现象:方法重写
        所以,当方法可以被重写的时候,父类原本的方法还在,但是调用是子类重写后的方法,
        如果我依旧想保留父类原本的方法,不想让子类重写,但是呢,我想让子类去用

        针对于这样的情况,java提供了一个关键字:final

        final: 最终的意思,不可以改变的意思。

        使用格式:一般情况下,把final放在访问权限修饰的后面返回值类型的前面
        常见的情况下,final不仅可以修饰成员方法,也可以修饰类,变量

*/

class Father4{
  
 //被final修饰的成员方法,不能被子类重写。
  //使用格式:把final放在访问权限修饰的后面返回值类型的前面
    public final void fun(){
        System.out.println("这是父类的fun方法");
    }
}

class Son4 extends Father4{
  
//    public void fun(){
//        System.out.println("这是父类的fun方法");
//    }
}

public class ExtendsDemo6 {
    public static void main(String[] args) {

    }
}

final的特点以及自定义常量:

程序示例

/*
    final:最终的意思,它可以修饰变量,类,方法

    特点:
        1、被final所修饰的类无法被其他类所继承
        2、被final所修饰的方法不能被重写,但是可以被重载
        3、被final修饰的变量变成了常量,无法再重新分配值
               被final修饰变量,可以在定义的时候先不赋值,只要在构造方法完毕之前赋值就可以了

    常量分为:
        A: 字面值常量:
            10,12.34,"hello",'a',true

        B: 自定义常量
            其实就是被final修饰的变量。
            final int a = 10;
*/

//被final所修饰的类无法被其他类所继承
//final class Fu1{
//
//}

class Fu1 {

//    被final修饰方法,子类无法被重写
    public final void fun1() {
        System.out.println("这是父类中的fun1方法");
    }

//     被final修饰方法,可以被重载,因为这相当于两个方法
//    public final void fun1(String s){
//        System.out.println("这是父类中的fun1方法");
//    }
}

class Zi1 extends Fu1 {
  
//被final修饰的变量变成了常量,无法再重新分配值,自定义常量。
    final int a = 10;
  
//    被final修饰方法,子类无法被重写  
//    public void fun1(){
//        System.out.println("这是父类中的fun1方法");
//    }

    public void fun2() {
        System.out.println("a: " + a);
    }
}

public class FinalDemo1 {
    public static void main(String[] args) {
        Zi1 zi1 = new Zi1();
        zi1.fun2();//输出10
//    被final修饰的变量变成了常量,无法再重新分配值          
//       zi1.a = 200;
    }
}
//--------------------------------------------------
/*
     被final修饰变量,只要在构造方法完毕之前赋值就可以了
*/
class Fu2{
  
//成员变量在定义的时候可以先不赋值
    int a;
  
//被final修饰的自定义常量在定义的时候也是可以先不赋值的
    final int b;

//构造代码块
    {
//只要在构造方法完毕之前赋值就可以了
        b = 100;
    }

    Fu2(){
//只要在构造方法完毕之前赋值就可以了      
//        b = 30;
        System.out.println(b);
    }

    public void fun1(){
//成员变量只要在使用之前赋值就可以了
        a = 20;
        System.out.println(a);
    }
}

public class FinalDemo3 {
    public static void main(String[] args) {
        Fu2 fu2 = new Fu2();
        fu2.fun1();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值