java学习笔记
java接口和抽象类、普通类的区别表格
本 文 目 录
接口、抽象类和普通类是Java编程中重要的概念,它们在定义和实现类时具有不同的特性和用途。通过比较它们的定义、目的、继承机制、抽象方法、成员变量、构造函数和访问修饰符等方面的差异,我们可以更好地理解它们各自的作用和适用场景。
接口和抽象类、普通类的区别表格
特性 | 接口 | 抽象类 | 普通类 |
---|---|---|---|
定义 | 定义了一组方法签名,但没有实现方法的具体实现。 | 定义了一个抽象类,其中包含一些抽象方法和非抽象方法。 | 定义了一个具体的类,其中包含属性和方法的具体实现。 |
目的 | 允许定义一组相关方法的协议。 | 提供一种方式来组织和抽象某些具有共同行为的类。 | 创建具有特定属性和行为的对象实例。 |
继承 | 可以被继承,但不能被实例化。 | 可以被继承,可以被实例化。 | 可以被继承,可以被实例化。 |
抽象方法 | 可以包含抽象方法。 | 可以包含抽象方法。 | 不可以包含抽象方法。 |
成员变量 | 只能是static 和final 类型。 |
可以是任何类型,包括static 和final 类型。 |
可以是任何类型,包括static 和final 类型。 |
构造函数 | 不可以有构造函数。 | 可以有构造函数。 | 可以有构造函数。 |
访问修饰符 | 方法不能有private 修饰符。 |
可以有private 、protected 或public 修饰符。 |
可以有private 、protected 或public 修饰符。 |
实现机制 | 需要被实现(通过类来实现)。 | 不需要被实现(只是提供一个抽象框架)。 | 不需要被实现(已经提供了具体实现)。 |
使用场景 | 定义一组方法的协议,允许不同的类实现这些方法。 | 用于抽象和组织具有共同行为的类,提供一些通用的功能。 | 创建具体的对象实例,具有特定的属性和行为。 |
接口和抽象类、普通类代码使用上的区别
接口的代码示例:
public interface Animal {
void makeSound();
void move();
}
抽象类的代码示例:
public abstract class Mammal {
protected String name;
public Mammal(String name) {
this.name = name;
}
public abstract void makeSound();
public void move() {
System.out.println(name + " is moving.");
}
}
普通类的代码示例:
public class Dog extends Mammal implements Animal {
public Dog(String name) {
super(name);
}
@Override
public void makeSound() {
System.out.println("Woof!");
}
@Override
public void move() {
System.out.println(name + " is running.");
}
}
从上面的代码中可以看出以下区别:
-
接口:接口定义了一组方法签名,但没有实现方法的具体实现。在上面的示例中,
Animal
接口定义了两个方法:makeSound()
和move()
。这些方法在接口中没有具体实现,需要在实现该接口的类中提供具体的实现。在示例中,Dog
类实现了Animal
接口,并提供了具体的方法实现。 -
抽象类:抽象类可以包含抽象方法和非抽象方法。在上面的示例中,
Mammal
是一个抽象类,它有一个抽象方法makeSound()
和一个非抽象方法move()
。抽象方法没有具体的实现,需要在继承该抽象类的子类中提供具体的实现。非抽象方法可以有具体的实现,子类可以选择覆盖或继承这些方法。在示例中,Dog
类继承了Mammal
抽象类,并提供了makeSound()
方法的具体实现,同时也覆盖了move()
方法。 -
普通类:普通类包含属性和方法的具体实现。在上面的示例中,
Dog
类是一个普通类,它继承了Mammal
抽象类并实现了Animal
接口。它包含了具体的属性(name
)和方法实现(makeSound()
和move()
)。普通类可以被实例化并创建对象,而接口和抽象类则不可以。
- 上一篇
java中==与equals的区别对比(表格)
在Java中,==和equals()是用于比较两个对象的运算符和方法,但它们在用法、目的和比较对象类型方面存在一些重要区别。以下是一个表格,总结了这些区别:## ==和equals()的区别表格| **特性** | **== 运算符** | **equals() 方法** || --- | --- | --- || **用途** | 用于比较基本数据类型和引用类型的相等性 | 用于比较对象的内容相
- 下一篇
Java参数传递 基本数据类型和引用数据类型(表格对比)
在Java中,参数传递主要有两种方式:基本数据类型和引用数据类型的传递。这两种方式在传递过程中有不同的特性,如下表所示:## 基本数据类型和引用数据类型参数传递对比| 对比项 | 基本数据类型 | 引用数据类型 || --- | --- | --- || 参数传递方式 | 值传递 | 值传递(传递的是引用) || 是否改变原始数据 | 不会改变原始数据 | 可能改变原始数据(通过引用的方式) ||