如果你能掌握一些简单的概念,就很容易理解java中的抽象。在编程中,管理程序的复杂性非常重要,通常,你会通过抽象来实现这一目的。
抽象是面向对象编程的基本概念之一,所以让我们深入学习一下。
java中的抽象是什么?
在基本层面上,抽象是隐藏程序的实现细节,以便你可以专注于其关键功能。
大多数情况下,抽象只是将现实世界的实体建模为适合你的程序的简化版本。然而,为了实现这种简化,非关键细节被忽略,最重要的细节必须成为焦点。
抽象的一个基本概念是封装的思想,即我们定义每个程序部分需要了解的清晰边界。这使得程序更加适应性强,因为在修改依赖于其他系统的系统时,你无需担心底层细节。
封装通常通过类来实现。根据方法和字段的访问修饰符,其他类只知道它们需要了解的内容,简化了它们之间的交互。
然而,在java中有两种其他方法可以促进抽象:抽象类和接口。
在java中实现抽象
abstractanimal是一个抽象类,它定义了一个没有提供实现的sound()方法。
©jingzhengli.com
抽象类
如果你阅读了我们关于java中类的文章,你就会知道抽象类是如何模拟现实世界实体的一个很好的例子。它们充当其他类的蓝图。
因此,它们本身不能被实例化。抽象类为它们的子类定义了公共行为。因此,子类可以根据需要实现属性。
让我们来看一个快速的例子。下面是一个我们可以为形状创建抽象类的方式:
abstract class shape {
protected string color;
public shape(string color) {
this.color = color;
}
public abstract double calculatearea();
public void display() {
system.out.println("this is a " + color + " shape.");
}
}
正如你在这里看到的,shape类定义了关于形状的一些通用细节,但没有进一步展开。
任何形状都可以有一个颜色,所以这里包含了该字段。此外,给定的形状有一种计算其面积的方法,但这将根据其外观而有很大差异。
因此,我们可以声明一个名为calculatearea的方法,而不实际说明它的作用,留给子类来实现。通过将其放在这里,所有的子类都需要实现这个方法。
class rectangle extends shape {
private double length;
private double width;
public rectangle(string color, double length, double width) {
super(color);
this.length = length;
this.width = width;
}
@override
public double calculatearea() {
return length * width;
}
}
像往常一样,我们可以使用extends将rectangle作为shape的子类。定义了两个新的字段:length和width。然后,我们使用这些字段重写calculatearea方法,提供了第一个实际的功能实现。现在可以像使用任何其他类一样实例化和使用rectangle类。
接口
接口类似于抽象类,但有一些关键区别。在抽象类的例子中,我们包含了一个具有主体的display方法,但在接口中不能这样做。接口中的方法永远不包括实现。
此外,一个类只能继承自另一个类,但可以继承自许多接口。最后,虽然抽象类可以有构造函数,但接口不可以。
下面是一个模拟动物的接口示例:
interface animal {
void eat();
void sleep();
}
可以看到,接口非常简单。通过包含一个eat和sleep方法,我们要求实现此接口的任何类都必须实现这些方法。
下面是使用该接口创建一个dog类的示例:
class dog implements animal {
@override
public void eat() {
system.out.println("狗在吃东西。");
}
@override
public void sleep() {
system.out.println("狗在睡觉。");
}
}
使用implements关键字告诉java正在继承一个接口,而不是使用extends。根据接口的要求,我们实现了eat和sleep方法,使它们适用于狗。
java中的抽象:总结
在java中编写大型程序时,抽象变得越来越重要,以维护良好的结构和可维护性。由于java是一种面向对象的语言,这些概念在许多不同的情况下都适用。
在java中使用抽象的方法还有很多,所以要继续学习!现在,让我们查看一些常见问题。
本文顶部的图片来自©tippapatt/shutterstock.com。