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 CLASS | FINAL 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 overridden | Overriding concept does not arise as final class cannot be inherited |
4. | A few methods can be implemented and a few cannot | All 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 subclass | Final class methods should be used as it is by other classes |
7. | Can be inherited | Cannot be inherited |
8. | Cannot be instantiated | Can be instantiated |
在评论中写代码?请使用 ide.geeksforgeeks.org,生成链接并在此处分享链接。