Java中抽象类和接口的区别,一文弄懂,图文并茂 |
您所在的位置:网站首页 › 接口定义static方法 › Java中抽象类和接口的区别,一文弄懂,图文并茂 |
目录
前言 1. 抽象类 1.1 定义 1.2 示例 1.3 使用 1.3.1代码-抽象类 1.3.2代码-抽象类继承类使用 1.3.3输出结果为: 1.4UML类图展示类间的关系 2. 接口 2.1 定义 2.2 示例 2.2.1代码-接口 2.3 使用 2.3.1代码-接口实现 2.3.2代码-接口实现类使用 2.3.3输出结果为: 2.4UML类图展示类间的关系 3. 抽象类和接口的区别 3.1 实现方式 3.2 方法类型 3.3 成员变量 3.4 构造方法 3.5 访问修饰符 4.文字上的对比区别 5.直观的二维表对比 6.抽象类和接口的使用场景 7. 总结 前言Java是一种面向对象的编程语言,Java中的抽象类和接口是两种常见的抽象概念,它们都能够帮助我们实现抽象化和多态性,但是它们在一些细节上有所不同。本文将详细介绍Java中抽象类和接口的定义、区别和使用,并提供相应的代码示例。 1. 抽象类 1.1 定义抽象类是一种特殊的类,它不能被实例化,只能被继承。抽象类具有类的所有特性,包括成员变量、成员方法、构造方法等,但是其中的某些方法是抽象的,需要在具体的子类中实现。抽象方法没有方法体,只有方法签名,用abstract关键字修饰。 抽象类通常被用来作为其他类的基类,子类必须实现抽象类中定义的所有抽象方法才能被实例化。 抽象类可以包含一些具体的方法和成员变量,这些方法和成员变量在继承的子类中可以直接使用。 1.2 示例1.2.1代码-抽象类 以下是一个抽象类的示例: abstract class Animal { private String name; public Animal(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } public abstract void makeSound(); }在上述代码中,Animal是一个抽象类,其中有一个抽象方法makeSound(),需要在具体的子类中实现。同时,Animal类中还有一个构造方法和两个普通方法。 1.3 使用 1.3.1代码-抽象类我们可以通过继承抽象类来实现具体的子类,同时需要实现其中的抽象方法。以下是一个继承Animal类的示例: class Dog extends Animal { public Dog(String name) { super(name); } @Override public void makeSound() { System.out.println("汪汪汪"); } }在上述代码中,Dog类继承了Animal类,同时实现了其中的抽象方法makeSound()。我们可以通过创建Dog类的实例来使用它。 1.3.2代码-抽象类继承类使用 public class Main { public static void main(String[] args) { Dog dog = new Dog("小狗"); System.out.println(dog.getName()); dog.makeSound(); } } 1.3.3输出结果为:小狗 汪汪汪 1.4UML类图展示类间的关系2. 接口 2.1 定义 接口是一种纯抽象的类型,它只包含抽象方法和常量。 接口通常被用来描述一个对象可以做什么,而不是它是什么,准确的来说描述的对象的行为 接口不能被实例化,需要通过实现接口的类来使用。接口中的方法都是抽象的,用abstract关键字修饰。接口中的常量都是public static final类型的,可以直接通过接口名访问。 2.2 示例以下是一个接口的示例: 2.2.1代码-接口 interface Shape { double PI = 3.1415926; double getArea(); double getPerimeter(); }在上述代码中,Shape是一个接口,其中有两个抽象方法getArea()和getPerimeter(),还有一个常量PI。 2.3 使用我们可以通过实现接口来使用它。以下是一个实现Shape接口的示例: 2.3.1代码-接口实现 class Circle implements Shape { private double radius; public Circle(double radius) { this.radius = radius; } @Override public double getArea() { return PI * radius * radius; } @Override public double getPerimeter() { return 2 * PI * radius; } }在上述代码中,Circle类实现了Shape接口,并实现了其中的两个抽象方法getArea()和getPerimeter()。我们可以通过创建Circle类的实例来使用它。 2.3.2代码-接口实现类使用 public class Main { public static void main(String[] args) { Circle circle = new Circle(2); System.out.println("面积:" + circle.getArea()); System.out.println("周长:" + circle.getPerimeter()); } } 2.3.3输出结果为:面积:12.5663704 周长:12.5663704 2.4UML类图展示类间的关系
3. 抽象类和接口的区别 虽然抽象类和接口都可以实现抽象化和多态性,但是它们在一些细节上有所不同。以下是抽象类和接口的区别: 3.1 实现方式抽象类是一种特殊的类,需要通过继承它来使用。接口是一种纯抽象的类型,需要通过实现它来使用。 3.2 方法类型抽象类中的方法可以是抽象的或者非抽象的,而接口中的方法都是抽象的。 3.3 成员变量抽象类中可以有普通成员变量,也可以有静态成员变量,而接口中只能有常量。 3.4 构造方法抽象类中可以有构造方法,而接口中不能有构造方法。 3.5 访问修饰符抽象类中的成员变量和成员方法可以有public、protected、default、private四种访问修饰符,而接口中的成员变量和成员方法只能有public访问修饰符。 4.文字上的对比区别(1)抽象类可以包含具体的方法和成员变量,而接口不能包含具体的方法和成员变量。 (2)一个类只能继承一个抽象类,而一个类可以实现多个接口。 (3)抽象类的目的是为了作为其他类的基类,而接口的目的是为了描述一个对象可以做什么。 (4)抽象类中的抽象方法必须在子类中实现,而接口中的所有方法都必须在实现类中实现。 (5)抽象类可以有构造方法,而接口不能有构造方法。 (6)抽象类可以拥有非抽象方法,而接口只能拥有抽象方法。 (7)抽象类中的访问修饰符可以是public、protected和default,而接口中的访问修饰符只能是public。 (8)抽象类可以拥有静态方法和静态变量,而接口只能拥有常量。 5.直观的二维表对比 维度抽象类接口定义一种特殊的类,不能被实例化定义一组方法方法可以包含普通方法和抽象方法只能包含抽象方法构造器可以有构造器没有构造器继承可以被继承可以被实现多继承不支持多重继承支持多重实现访问可以有 public、protected、private 访问修饰符只能有 public 访问修饰符变量可以有实例变量、类变量只能有 public、static 常量 6.抽象类和接口的使用场景抽象类和接口都有自己的使用场景,下面我们来看一下它们的具体应用: (1)抽象类通常被用来作为其他类的基类,用来定义一组通用的方法和属性。子类必须实现抽象类中的所有抽象方法才能被实例化。 (2)接口通常被用来描述一个对象可以做什么,而不是它是什么。接口可以被类实现,用来强制实现一组特定的方法。 (3)如果一个类需要实现多个不同的蓝图,那么它应该实现多个接口。 (4)如果一个类需要实现一个通用的蓝图,并且还需要拥有一些具体的方法和属性,那么它应该继承一个抽象类。 7. 总结本文详细介绍了Java中抽象类和接口的定义、区别和使用,并提供了相应的代码示例。抽象类和接口都是实现抽象化和多态性的重要手段,需要根据实际需求选择使用。同时,需要注意它们在一些细节上的差异,以便正确使用它们。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |