【JavaSE】final与abstract关键字

简介: final与abstract关键字

前言🙉

final和abstract都用于修饰类的成员,存在的意义都是用于优化限定,让类与类之间,类和成员之间变得更加灵活,结合方式更加多元,从而更加高效,简便地实现各种需求和功能。abstract体现的抽象思想是提高代码复用性的重要映射

一.final

1.定义与作用

🟠final-代表最终的,最后的。可以修饰类,属性,方法和局部变量
在这里插入图片描述

使用场景:

🟤当不希望类被继承时,可以用final修饰(太监类)
🟤当不希望父类的某个方法被子类覆盖重写
🟤当不希望类的某个属性值被修改
🟤当不希望某个局部变量被修改

2注意事项

🟤 1.final修饰的属性叫常量,即不可改变的
🟤2.final修饰的属性在定义时,必须赋初值,而且以后无法修改
可以在定义时赋值,也可以在构造器和代码块中赋值
🟤3.若final修饰的属性是静态的,则初始化的位置只能在定义时,静态代码块中
🟤4.final类不能被继承,但可以实例化对象(这也是网上称作为太监类的原因)
🟤5.如果类没有被final修饰,但是有final修饰的方法,则该方法不能被重写,但类可以被继承
🟤6.如果一个类已经是final类就没有必要把方法用final来修饰,因为他无法被继承
🟤7.final不能修饰构造方法
🟤8.final和static可以搭配使用在类不被加载的情况下调用方法
🟤9.包装类和String类都是final类

二.abstract

1.定义与作用

abstract-意为抽象的,当父类的某些方法要声明,但没有具体的实现形式,可以将其声明为抽象方法,这时用abstract修饰

2.注意事项

🟤1.抽象类不能被实例化
🟤2.抽象类不一定要包含抽象方法
🟤3.一个类包含了抽象方法,则这个类必须声明为抽象类
🟤4.abstract只能修饰类和方法不能修饰属性和其他的
🟤5.抽象类可以有任何成员(具有类的性质)
🟤6.抽象方法不能有主体,写法如下
🟤7.如果一个类继承了一个抽象类,则它必须实现抽象类的所有抽象方法,除非它自己也声明为abstract类
🟤8.抽象方法不能用private,final,static修饰因为这些类都和重写相违背

✔️抽象方法写法:

public abstract long calSum(); //这就是一个抽象方法

3.应用体现

✔️抽象类的一个具体应用:
▶️通过利用继承关系与抽象方法实现一个计算不同运算方法耗时的问题
▶️把父类的一个方法抽象出来,让子类重写该方法,达到提高代码复用性简化程序的目的。

public abstract class Template01 {
    public abstract long calSum();  //把方法抽象出来
    public void cal(){
        long date1=System.currentTimeMillis();  //起始时间
        calSum();  //调用抽象方法 方便子类重写
        long date2=System.currentTimeMillis(); //结束时间
        System.out.println("执行所用时间"+(date2-date1)+"计算结果是:"+calSum());  //耗时
    }
}
 class AA extends Template01{
    public long num=0;
    @Override
    public long calSum() {  //重写父类的抽象方法
        for (int i = 0; i < 10000000; i++) {
            num*=i;
        }return num;
    }
}
 class BB extends Template01{
    public long num=0;
    @Override
    public long calSum() {   //重写父类的抽象方法
        for (int i = 0; i < 10000000; i++) {
            num+=i;
        }return num;
    }
}
🌦️如果不通过抽象方法,我们可能要在子类中把计算耗时的功能写出来,然后在类中修改不同的形式的calSum()方法来达到目的,利用抽象方法,只需要在各自的的类中重写一下calSum()然后更改形式就行。这就是提高代码复用性的一种体现~
相关文章
|
Java C++ Python
Java 的关键字 final 和 static
Java 中最经典 final 修饰的类就是 String 了,它无法被任何类继承,不仅仅是为了保证 String 的不变性,同时在早期的 Java 版本中会将 final 修饰的方法转化为内嵌调用,提高程序性能(后来的 Java 会自动进行优化,不需要显式地用 final 修饰)。不过要注意的一点是,final 修饰的引用变量,其指向的对象的内容是可以被改变的。final 修饰符可以用来修饰类、方法和变量,final 修饰的类不能够被继承,修饰的方法不能被继承类重新定义,修饰的变量为常量,是不可修改的。
67 0
|
3月前
|
存储 Java 编译器
关键字: final详解
掌握final关键字的使用对于Java程序员来说至关重要。它不仅能够提高程序的安全性和清晰性,还可以帮助编译器在一些情况下进行优化。恰当使用final可以使你的Java代码更加健壮、高效。
42 0
|
6月前
|
Java
java-基础-Interface、abstract类、Static class 、non static class的区别
【4月更文挑战第5天】Java中的接口、抽象类、静态类和非静态类各具特色:接口仅含抽象方法和常量,用于定义行为规范;抽象类可包含抽象和非抽象方法,提供部分实现,支持多继承;静态内部类不依赖外部类实例,可独立存在,访问外部类的静态成员;非静态内部类持有关联外部类引用,能访问其所有成员。这些机制根据设计需求和场景选择使用。
46 6
|
Java
关键字final
关键字final
45 0
|
Java
关键字abstract
关键字abstract
60 0
|
人工智能 Java
Java中访问权限修饰符(public , private , protected)
Java中访问权限修饰符(public , private , protected)
|
Java C++
Java的static修饰符
本文主要介绍:静态域、静态常量、静态方法、工厂方法。
|
Java 程序员 C#
Java的final修饰符
可以将实例域定义为 final。对于 final 域来说,构建对象时必须初始化 final 实例域,构造对象之后就不允许改变 final 实例域的值了。 final 类和方法用来阻止继承。
120 0
|
算法 Java 关系型数据库
Java进阶部分详解(一)--->final 关键字、Object、String与内部类
从本章节开始就是Java进阶部分内容,从本章节开始开发Java使用 IDEA 开发工具!
121 0