提交 799cd92f 编写于 作者: W wizardforcel

2020-05-22 22:42:37

上级 f9539d27
# Java 扩展与实现关键字
# Java `extends`与`implements`关键字
> 原文: [https://howtodoinjava.com/oops/extends-vs-implements/](https://howtodoinjava.com/oops/extends-vs-implements/)
在 Java 中,**扩展**用于扩展类,**实现**用于实现接口。 这是扩展与工具之间的主要**区别。**
在 Java 中,`extends`用于扩展类,`implements`用于实现接口。 这是扩展与工具之间的主要**区别**
## 1\. 扩展关键字
在 Java 中,我们可以通过使用 **extend 关键字**对其进行扩展来继承类的字段和方法。 请注意,在 Java 中,一个类最多只能扩展一个类。
在 Java 中,我们可以通过使用`extend`关键字对其进行扩展来继承类的字段和方法。 请注意,在 Java 中,一个类最多只能扩展一个类。
[`ArrayList`](https://howtodoinjava.com/java-arraylist/)类为例。 它扩展了`AbstractList`类,又扩展了`AbstractCollection`类。
因此,基本上 ArrayList 类具有其父类 AbstractList 和 AbstractCollection 的方法和行为。
因此,基本上`ArrayList`类具有其父类`AbstractList``AbstractCollection`的方法和行为。
AbstractCollection 提供了诸如 contains(Object o),toArray(),remove(Object o)等方法。而 AbstractList 类提供了 add(),indexOf(),lastIndexOf(),clear()等。同样一些方法被 ArrayList 覆盖。
`AbstractCollection`提供了诸如`contains(Object o)``toArray()``remove(Object o)`等方法。而`AbstractList`类提供了`add()``indexOf()``lastIndexOf()``clear()`等。同样一些方法被`ArrayList`覆盖。
```java
public class ArrayList<E> extends AbstractList<E>
......@@ -25,7 +25,7 @@ public class ArrayList<E> extends AbstractList<E>
#### Java 扩展示例
让我们从头开始创建一些东西,以更好地了解使用`extends`关键字的 Java 继承的工作方式。 我创建了两个类 – `ParentClass``ChildClass`,其中 **ChildClass 扩展 ParentClass**
让我们从头开始创建一些东西,以更好地了解使用`extends`关键字的 Java 继承的工作方式。 我创建了两个类 – `ParentClass``ChildClass`,其中`ChildClass`扩展`ParentClass`
```java
public class ParentClass {
......@@ -77,7 +77,7 @@ public class Main
在 Java 中,我们可以实现多个接口。 在这种情况下,类必须实现所有接口的所有方法。 (或将其声明为[抽象](https://howtodoinjava.com/java/basics/abstract-keyword/))。
再看一次 ArrayList 类声明。 它实现了 4 个接口,即`List``RandomAccess``Cloneable`[`Serializable`](https://howtodoinjava.com/java/serialization/externalizable-vs-serializable/)。 它已经在给定的接口中实现了所有方法。
再看一次`ArrayList`类声明。 它实现了 4 个接口,即`List``RandomAccess``Cloneable`[`Serializable`](https://howtodoinjava.com/java/serialization/externalizable-vs-serializable/)。 它已经在给定的接口中实现了所有方法。
#### Java 实现示例
......@@ -117,7 +117,7 @@ public class Human implements Movable, Swimmable
```
现在,我们将测试人类的阶级及其强制行为。
现在,我们将测试`Human`及其强制行为。
```java
public class Main
......@@ -141,13 +141,13 @@ I am swimming
```
显然,Human 类实现了两个接口并定义了它们的行为。 这就是 Java 接口的全部目的。
显然,`Human`类实现了两个接口并定义了它们的行为。 这就是 Java 接口的全部目的。
## 3\. 扩展与工具之间的差异
## 3\. 扩展与实现之间的差异
根据上述示例,让我们列出 Java 中 extended 和 Implements 关键字之间的**区别。**
根据上述示例,让我们列出 Java 中`extends``implements`关键字之间的**区别**
1. extend 关键字用于继承类; while 关键字用于继承接口。
1. `extends`关键字用于继承类; `implements`关键字用于继承接口。
2. 一类只能扩展一个类。 但可以实现任意数量的接口。
3. 扩展超类的子类可能会覆盖超类中的某些方法。 一个类必须实现接口中的所有方法。
......
......@@ -6,10 +6,10 @@
它返回:
* **是**-如果变量是指定类的实例,则它是父类或实现指定接口或父接口
* **否**-如果变量不是类的实例或接口的实现; 或变量为空
* `true` - 如果变量是指定类的实例,则它是父类或实现指定接口或父接口
* `false` - 如果变量不是类的实例或接口的实现; 或变量为空
## 1\. Java instanceof 语法
## 1\. Java `instanceof`语法
`instanceof`运算符将变量测试为指定的类型。 变量写在运算符的左侧,类型在运算符的右侧。
......@@ -26,9 +26,9 @@ if(var instanceof ClassType) {
```
## 2\. Java instanceof 示例
## 2\. Java `instanceof`示例
让我们看一个示例,以充分了解 instanceof 运算符用于比较类型的用法。 在此示例中,我们使用 [ArrayList](https://howtodoinjava.com/java-arraylist/) 类测试其类型信息。
让我们看一个示例,以充分了解`instanceof`运算符用于比较类型的用法。 在此示例中,我们使用[`ArrayList`](https://howtodoinjava.com/java-arraylist/) 类测试其类型信息。
```java
import java.util.AbstractList;
......@@ -70,12 +70,12 @@ false
```
## 3\. 带数组的 Java instanceof
## 3\. 带数组的 Java `instanceof`
在 Java 中,数组也被视为对象,并具有与之关联的字段和方法。 因此,我们也可以将 instanceof 运算符与[数组](https://howtodoinjava.com/java-array/)一起使用。
在 Java 中,数组也被视为对象,并具有与之关联的字段和方法。 因此,我们也可以将`instanceof`运算符与[数组](https://howtodoinjava.com/java-array/)一起使用。
* **基本数组** Object 和 self 类型的实例。 例如 int []是 Object 和 int []的类型。 两种比较均返回 true
* **对象数组**是对象的类型,对象数组,类类型数组,父类类型数组。 例如 Integer []是 Object,Object [],Integer []和 Number []`Integer extends Number`)的类型。
* **基本数组**`Object`和自身类型的实例。 例如`int[]``Object``int[]`的类型。 两种比较均返回`true`
* **对象数组**是对象,对象数组,类类型数组,父类类型数组的类型。 例如`Integer[]``Object``Object[]``Integer[]``Number []``Integer extends Number`)的类型。
```java
import java.util.AbstractList;
......@@ -129,11 +129,11 @@ true
```
## 4\. 使用 instanceof 正确进行类型转换
## 4\. 使用`instanceof`正确进行类型转换
一个使用 instanceof 运算符的现实示例可以将变量类型转换为另一种类型。 instanceof 运算符有助于在运行时避免 **ClassCastException**
一个使用`instanceof`运算符的现实示例可以将变量类型转换为另一种类型。`instanceof`运算符有助于在运行时避免`ClassCastException`
考虑以下示例,其中我们尝试将列表类型转换为 LinkedList 类,其中原始变量的类型为 ArrayList。 它将抛出 ClassCastException
考虑以下示例,其中我们尝试将列表类型转换为`LinkedList`类,其中原始变量的类型为`ArrayList`。 它将抛出`ClassCastException`
```java
List<String> list = new ArrayList<>();
......@@ -142,7 +142,7 @@ LinkedList<String> linkedList = (LinkedList<String>) list;
```
为了正确地转换变量,我们可以使用 instanceof 运算符。 它不会导致 ClassCastException
为了正确地转换变量,我们可以使用`instanceof`运算符。 它不会导致`ClassCastException`
```java
List<String> list = new ArrayList<>();
......@@ -156,6 +156,6 @@ if(list instanceof LinkedList)
```
向我提供有关用于类型比较的 **Java instanceof 运算符**的问题。
向我提供有关用于类型比较的 **Java `instanceof`运算符**的问题。
学习愉快!
\ No newline at end of file
......@@ -20,7 +20,7 @@ Table of Contents
> 默认方法使您可以向接口添加新功能,并确保向后兼容实现该接口的现有类。
顾名思义,接口中的默认方法是默认情况下将调用**的方法-如果在实现类时未覆盖**。 让我们看一个例子。
顾名思义,接口中的默认方法是默认情况下将调用的方法 - 如果在实现类时未覆盖。 让我们看一个例子。
`Moveable`接口是一些现有接口,并且想要添加新方法`moveFast()`。 如果它使用旧技术添加了`moveFast()`方法,则实现`Moveable`的所有类也将被更改。 因此,我们将`moveFast()`方法添加为默认方法。
......@@ -53,7 +53,7 @@ public class Animal implements Moveable
## 2\. 如何通过默认方法实现多重继承?
Multiple inheritance is a feature of some object-oriented computer programming languages in which an object or class can inherit characteristics and behavior from more than one parent object or parent class.
多重继承是某些面向对象的计算机编程语言的功能,其中对象或类可以从多个父对象或父类继承特征和行为。
我们知道在 Java 中(直到 jdk 7),[`extends`](https://howtodoinjava.com/oops/extends-vs-implements/)关键字支持 Java 中的继承,该关键字用于从父类创建子类。 您不能从两个类扩展。
......@@ -129,7 +129,7 @@ public class Animal implements Moveable, Crawlable
```
因此,要解决上述冲突,调用者类必须确定要调用的`run()`方法,然后使用如下所示的接口引用来调用**。**
因此,要解决上述冲突,调用者类必须确定要调用的`run()`方法,然后使用如下所示的接口引用来调用
```java
Moveable.super.run(); //Call Moveable's run() method
......
# 关联,汇总和组成
# 关联,聚合和组合
> 原文: [https://howtodoinjava.com/oops/association-aggregation-composition/](https://howtodoinjava.com/oops/association-aggregation-composition/)
......@@ -29,9 +29,9 @@ Table of Contents
![aggregation](img/df51193b73e268b86b2602b6d429852f.png)
## 3\. Java 的组
## 3\. Java 的组
我们使用术语**组成**来指代其对象**没有独立生命周期**的关系,而*如果删除了父对象,则所有子对象也将被删除[*
我们使用术语**组合**来指代其对象**没有独立生命周期**的关系,而*如果删除了父对象,则所有子对象也将被删除*
让我们以问题和答案之间的关系为例。 单个问题可以有多个答案,并且答案不能属于多个问题。 如果我们删除问题,答案将自动删除。
......
# Java 并发辅导
\ No newline at end of file
# Java 并发指南
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册