📜  Java中最终和抽象之间的区别

📅  最后修改于: 2022-05-13 01:54:26.010000             🧑  作者: Mango

Java中最终和抽象之间的区别

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

最终类:使用“Final”关键字声明的类称为最终类。 final 关键字用于最终确定该类中使用的类、方法和变量的实现。使用final类的主要目的是防止类被继承(即,如果一个类被标记为final,那么其他类就不能从final类继承任何属性或方法。如果最终类被扩展, 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 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 class A {
    public abstract void methodOne();
}

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

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

但是,抽象类可以有最终方法。这个最终方法被视为具有不能被覆盖的主体的普通方法。

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

S.No.ABSTRACT CLASSFINAL CLASS
1.Uses the “abstract” key word.Uses the “final” key word.
2.This helps to achieve abstraction.This helps to restrict other classes from accessing its properties and methods.
3.For later use, all the abstract methods should be overriddenOverriding concept does not arise as final class cannot be inherited
4.A few methods can be implemented and a few cannotAll methods should have implementation
5.Cannot create immutable objects (infact, no objects can be created)Immutable objects can be created (eg. String class)
6.Abstract class methods functionality can be altered in subclassFinal class methods should be used as it is by other classes
7.Can be inheritedCannot be inherited
8.Cannot be instantiatedCan be instantiated