Java 中 Final 和 Abstract 的区别
本文讨论了抽象类和最终类的区别。在讨论这些差异之前,让我们先了解每一个差异意味着什么。
最终类:用“最终”关键字声明的类称为最终类。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[])
{
}
}
抽象类:使用“抽象”关键字声明的类称为抽象类。抽象类背后的主要思想是实现抽象的概念。抽象类既可以有抽象方法(不带主体的方法),也可以有具体方法(带主体的常规方法)。但是,普通类(非抽象类)不能有抽象方法。
下面是如何声明抽象类的示例。
// 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();
}
}
上面的程序给出了“极客”作为输出。所有抽象方法都应该在子类中被重写,以提供实现。然而,从定义来看,最终的方法不能被覆盖。因此,抽象的最终组合对于方法来说是非法的。此外,对于抽象类,我们需要创建一个子类来提供实现,而对于最终类,我们不能创建子类。因此,对于类来说,最终的抽象组合是非法的。因此,最终类不能包含抽象方法,而抽象类可以包含最终方法。
下面是一个示例,演示了抽象类和最终类的组合。
final class A {
public abstract void methodOne();
}
显然,这个实现是无效的,因为最终类不能有抽象方法。作为最后一类是不能继承的。
abstract class A {
public final void methodOne() {}
}
但是,抽象类可以有最终方法。这个最终的方法被当作一个普通的方法,它的主体不能被覆盖。
下表演示了抽象类和最终类之间的区别:
没有。 | 抽象类 | 期末班 |
---|---|---|
1. | 使用“抽象”关键词。 | 使用“最终”关键词。 |
2. | 这有助于实现抽象。 | 这有助于限制其他类访问其属性和方法。 |
3. | 为了以后使用,所有的抽象方法都应该被覆盖 | 由于最终类不能被继承,所以不会出现覆盖概念 |
4. | 一些方法可以实现,一些不能 | 所有的方法都应该有实现 |
5. | 无法创建不可变的对象(事实上,无法创建任何对象) | 可以创建不可变的对象(例如字符串类) |
6. | 抽象类方法的功能可以在子类中改变 | 最终类方法应该像其他类一样使用 |
7. | 可以遗传 | 无法继承 |
8. | 无法实例化 | 可以实例化 |
版权属于:月萌API www.moonapi.com,转载请注明出处