介绍
Abstraction 是一个只暴露基本细节并隐藏实现细节的概念。除了封装、继承和多态之外,它是OOPs的基本概念之一。抽象只保留与特定目的最相关的信息。
例如:
ArrayList将对象按顺序存储为列表,您可以使用add() 方法将元素添加到 ArrayList、remove() 从中删除元素的get() 方法以及从 ArrayList 中检索元素的方法。这就是您使用ArrayList . 这就是java中的抽象。
如果你想使用 ArrayList,你不需要了解ArrayList 内部是如何工作的。
ArrayList``List 通过实现接口来使用抽象,List 接口提供了使用ArrayList的所有必要方法。
所以你可以声明 ArrayList 如下:
List<String> list = new ArrayList<>();
list.add("Java");
list.add("Python");
list.add("C++");
list.remove("Python");
String python = list.get(1);
List 接口的调用add() 和方法。remove()``get
假设你后来意识到你需要使用LinkedList 而不是ArrayList 你需要执行更多的添加和删除操作而不是访问操作。你可以通过ArrayList 与 LinkedList来了解它们之间的区别。
您只需要更改突出显示的行。
List<String> list = new LinkedList<>();
list.add("Java");
list.add("Python");
list.add("C++");
list.remove("Python");
String python = list.get(1);
ArrayList并LinkedList 通过实现 List 接口来使用抽象,这就是我们能够在上面的示例中ArrayList 替换为的原因。LinkedList
让我们再举一个现实生活中的例子。
当您在 上搜索任何文本时google ,您只需在文本区域中键入文本并单击搜索按钮。幕后发生了什么,谷歌搜索算法是如何工作的,你可能不知道。
实现抽象的方法
您可以在 java 中使用两种方式实现抽象。
-
抽象类(0 到 100% 抽象)
-
接口(100% 抽象)
java中的抽象类
抽象类是声明为抽象并且可以具有abstract or non abstract methods . 它应该由子类扩展并且应该实现抽象方法。
java中的抽象方法:
抽象方法是没有实现的方法,即它没有任何主体。
abstract class Shape{
public abstract double calculateArea(); // No body for calculatedArea method
}
java中的接口
接口一般用于为类提供契约来实现。接口没有任何方法的实现。一个类实现了一个接口,从而继承了接口的抽象方法。所以这是一种签订合同,你同意如果你实现了这个接口,那么你必须使用它的方法。它只是一个模式,它本身不能做任何事情。
package com.arpit.java2blog;
interface Paintable
{
void paint();
}
public class Room implements Paintable{
@Override
public void paint() {
System.out.println("Painting the room");
}
}
抽象示例
可以说我们有 Sport as interface 。现在它的实现将由名为“Cricket”和“Football”的类提供。在实际场景中,最终用户不会知道实现类,实现类的对象可以由工厂方法提供。工厂方法可用于根据某些标准创建实现类的对象。 让我们创建一个名为Sport.java .
package com.arpit.java2blog;
public interface Sport {
void play();
}
创建名为的类Cricket.java
package com.arpit.java2blog;
public class Cricket implements Sport {
@Override
public void play() {
System.out.println("Playing cricket");
}
}
创建名为的类Football.java
package com.arpit.java2blog;
public class Football implements Sport {
@Override
public void play() {
System.out.println("Playing football");
}
}
创建名为的主类SportInterfaceMain.java
package com.arpit.java2blog;
public class SportInterfaceMain {
public static void main(String[] args) {
// In real scenario, you will get concrete object using getSport() factory method
Sport sport=new Cricket();
sport.play();
System.out.println("=================");
// You can easily change implementation
sport=new Football();
sport.play();
}
}
当你运行上面的程序时,你会得到下面的输出:
Playing cricket
=================
Playing football
抽象与封装
封装是将相关数据(变量和方法)绑定到一个类中的过程。我们可以使用public、private、protected等访问修饰符来实现封装。
封装是所需抽象的实现。
抽象更多的是设计级别的概念,可帮助您仅提供基本细节并隐藏实现细节。我们可以通过abstract class 和来实现抽象interface 。
结论
您已经了解了什么是抽象,如何借助示例实现抽象以及抽象与封装之间的区别。 这就是abstraction Java中的全部内容。
|