当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Java Final和Abstract的区别用法及代码示例


本文讨论抽象类和最终类的区别。在讨论差异之前,让我们首先了解它们各自的含义。

最终类:使用“Final”关键字声明的类称为最终类。 Final关键字用于最终确定该类中使用的类、方法和变量的实现。使用最终类的主要目的是防止该类被继承(即,如果一个类被标记为最终类,则任何其他类都不能从该最终类继承任何属性或方法。如果最终类被扩展,Java 会给出编译时错误。以下是如何声明最终类的示例。但是,由于要继承此最终类,因此会出现编译时错误。

Java


// Java program to demonstrate the
// Final class
final class Super {
    private int data = 100;
}
public class Sub extends Super {
    public static void main(String args[])
    {
    }
}

抽象类:使用 “abstract” 关键字声明的类称为抽象类。抽象类背后的主要思想是实现以下概念抽象。抽象类可以同时具有抽象方法(没有主体的方法)和具体方法(有主体的常规方法)。但是,普通类(非抽象类)不能有抽象方法。以下是如何声明抽象类的示例。

Java


// Java program to demonstrate
// an abstract class
// Abstract parent class
abstract class Book {
    // Abstract method without body
    public abstract void page();
}
// shayar class extends Book class
public class shayar extends Book {
    // Declaring the abstract method
    public void page()
    {
        System.out.println("Geek");
    }
    // Driver code
    public static void main(String args[])
    {
        Book obj = new shayar();
        obj.page();
    }
}

上面的程序给出“Geek”作为输出。所有抽象方法都应该在子类中重写以提供实现。然而,从定义来看,final 方法不能被重写。因此,抽象的最终组合对于方法来说是非法的。而且,对于抽象类,我们需要创建一个子类来提供实现,而对于最终类,我们不能创建子类。因此,最终的抽象组合对于类来说是非法的。因此,最终类不能包含抽象方法,而抽象类可以包含最终方法。下面是一个示例,演示了抽象类和最终类的组合。

Java


final class A {
    public abstract void methodOne();
}

显然,这个实现是无效的,因为最终类不能有抽象方法。作为final类不能被继承。

Java


abstract class A {
    public final void methodOne() {}
}

但是,抽象类可以有最终方法。这个最终方法被视为具有无法重写的主体的普通方法。

下表展示了抽象类和最终类之间的区别:

编号 抽象类 最后一堂课
1. 使用“abstract”关键字。 使用“final”关键字。
2. 这有助于实现抽象。 这有助于限制其他类访问其属性和方法。
3. 为了以后使用,应该重写所有抽象方法 由于最终类不能被继承,因此不会出现重写概念
4. 有的方法可以实现,有的不能实现 所有方法都应该有实现
5. 无法创建不可变对象(事实上,无法创建任何对象) 可以创建不可变对象(例如 String 类)
6. 抽象类方法的函数可以在子类中更改 Final 类方法应该像其他类一样使用
7. 可以继承 不可继承
8. 无法实例化 可以实例化
9. 抽象类可能有最终方法。 Final类没有抽象方法或final方法。
10. 抽象类有助于实现抽象。 Final 类可以帮助限制其他类访问属性和方法。


相关用法


注:本文由纯净天空筛选整理自gauravmoney26大神的英文原创作品 Difference between Final and Abstract in Java。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。