首页 >Java >java教程 >Java中的抽象类

Java中的抽象类

PHPz
PHPz原创
2024-08-30 15:59:08921浏览

下面的文章提供了 Java 中抽象类的概述。抽象类与 Java 中的任何其他普通类一样。抽象类和常规类之间的显着区别是创建抽象类,我们必须使用“ABSTRACT”关键字。它是类实现的分离。他们用来定义其子类的非常常见的特征。这种类型的类称为抽象类。最重要的是,我们无法创建抽象类的对象。

开始您的免费软件开发课程

网络开发、编程语言、软件测试及其他

抽象类可以包含抽象方法和非抽象方法。但是,它们不能包含子类只能提供的抽象方法的主体。如果子类没有实现抽象方法,那么我们必须显式地将其设为抽象方法。换句话说,如果一个类包含抽象方法,它必须将自己定义为 ABSTRACT。我们可以使用抽象类将多个Java类分组,优化代码,使代码更具可读性,减少冗余。它还为未来的课程提供了模板。

Java 中抽象类的语法

抽象类的语法如下:

Java中的抽象类

抽象类在 Java 中如何工作?

  • 抽象类有一个抽象方法和一个非抽象方法,即没有主体的抽象方法,并且它们可以有带有实现的方法。
  • 抽象类用于提供特定于不同类的最常见功能。子类可以根据自己的需要或要求以不同的方式实现这些抽象方法。
  • 我们无法使用new操作符创建抽象类的对象,但我们仍然可以定义它的构造函数,该构造函数只能在其子类的构造函数中调用。子类构造函数可以访问超类构造函数来初始化其变量,该变量可能会在子类中用于进一步的需求。

Java 中抽象类的示例

下面给出了以下示例:

Human.java

package com.cont.article;
public abstract class Human
{
public abstract void whatTheylike();
public void doTheysleep()
{
System.out.println("Yes every human require sleep.");
}
}

Human1.java

package com.cont.article;
public class Human1 extends Human
{
@Override
public void whatTheylike()
{
System.out.println("we like to have icecream.");
}
}

Human2.java

package com.cont.article;
public class Human2 extends Human
{
@Override
public void whatTheylike()
{
System.out.println("we like to have coffee.");
}
}

TestHuman.java

package com.cont.article;
public class TestHuman
{
public static void main(String[] args)
{
Human human1 = new Human1();
human1.whatTheylike();
Human human2 = new Human2();
human2.whatTheylike();
human1.doTheysleep();
human2.doTheysleep();
}
}

输出:

Java中的抽象类

在上面的例子中,HUMAN 是一个抽象类,它定义了人类的共同需求、好恶。人有不同的类型,有不同的好恶。所以每个人都可以提供他们喜欢的具体实现。这仅针对他们。

抽象类的主要优点是我们可以根据需求具体实现方法,减少冗余,增加代码的可读性,隐藏方法的实现,提供部分抽象。

我们可以再举一个例子来理解何时使用抽象类。

  • 我们应该使用抽象类来与具有特定实现的不同类共享通用功能。
  • 在抽象类中,字段不应该是静态的和最终的;我们还可以有具体的、私有的、公共的和受保护的方法。

假设我们有一个 Animal 类。地球上有各种各样的动物,它们在某些或主要意义上都彼此不同。尽管如此,它将包含所有共同特征。

现在,这个 Animal 类不能为每个 Animal 提供特定的方法。所以通过抽象类的概念,我们就可以实现这个功能,不需要多余的代码。

所有动物都有不同类型的声音、习惯等。例如狗、猫、大象、零食都有不同的声音。因此,为此,我们可以在父类中拥有一个通用方法,所有其他子类或子类都可以通过该方法提供其特定的实现。

在父类,即 Animal 中,我们有一个通用的抽象方法,称为它们的 Sound ()。所以每个子类都需要重写这个方法并提供其具体的实现。

抽象类和接口

下面是抽象类和接口的区别:

  • 抽象类和接口都是Java中用来实现抽象的。然而,抽象类提供部分抽象,而接口提供 100% 或完全抽象。
  • 默认情况下,接口中的变量是最终的。但抽象类也包含一个非最终变量。同样,抽象类也可以有静态、非静态变量。但该接口只会包含一个最终的静态变量。
  • 抽象类的成员变量可以是私有的、公共的和受保护的,但默认情况下,它们在接口中是公共的。
  • 一个抽象类可以扩展另一个Java类并实现多个接口,但一个接口只能扩展另一个接口。同样,抽象类可以提供接口的实现,但接口不能这样做。
  • 我们使用implements和extend关键字来实现和扩展接口和类。
  • 我们可以通过方法修改或访问抽象类的非静态和非final变量。

结论

抽象类用于提供部分抽象。抽象类不能使用 NEW 关键字实例化。抽象方法没有主体,并且始终以分号 (;) 结尾。抽象类包含抽象方法和非抽象方法。抽象超类的子类需要实现所有抽象方法;如果它没有提供,那么它必须将自己声明为抽象类。即使超类是具体的,子类也可以是抽象的。非抽象类不能包含抽象方法。此外,抽象方法是非静态的。因此,抽象类也有抽象方法和具体方法,因此它们不能提供100%的抽象。这是一个向最终用户隐藏复杂逻辑并仅向他们显示服务的过程。

另一方面,即使其超类是具体的,子类也可以是抽象的,并且也可以用作数据类型。抽象类可以具有静态字段和静态方法。您可以将这些静态成员与类引用一起使用。

以上是Java中的抽象类的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn