前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【JavaSE专栏64】抽象类和接口,不能被实例化的类有什么用?

【JavaSE专栏64】抽象类和接口,不能被实例化的类有什么用?

作者头像
Designer 小郑
发布2023-08-09 17:35:48
4380
发布2023-08-09 17:35:48
举报
文章被收录于专栏:跟着小郑学JAVA

一、什么是抽象类

在 Java 中,抽象类是指不能被实例化的类,它只能被用作其他类的基类。

抽象类通过关键字 abstract 来声明,包含抽象方法和非抽象方法,抽象方法是只有声明而没有实现的方法,需要子类来实现,非抽象方法是有具体实现的方法,子类可以直接继承和使用。

抽象类有以下

4

个特点,请同学们认真学习。

  1. 抽象类不能被实例化:抽象类不能直接创建对象,只能作为父类被继承。
  2. 子类必须实现抽象方法:如果一个类继承了一个抽象类,那么它必须实现抽象类中的所有抽象方法,除非该子类也是一个抽象类。
  3. 子类可以继承非抽象方法:抽象类中可以包含非抽象方法,子类可以直接继承和使用这些非抽象方法。
  4. 抽象类可以包含成员变量和构造方法:抽象类可以定义成员变量和构造方法,供子类继承和使用。

抽象类的主要作用是为了实现代码的复用性和扩展性,通过定义抽象类,可以将一些共同的属性和方法抽象出来,让子类来继承和实现具体的业务逻辑,抽象类还可以用于定义一些共同的接口和约束,提高代码规范性和可维护性。

下面是一个示例代码来说明抽象类的使用,请同学们复制到终端执行。

代码语言:javascript
复制
// 抽象类
abstract class Animal {
   // 抽象方法
   public abstract void sound();
   // 非抽象方法
   public void sleep() {
      System.out.println("Animal is sleeping.");
   }
}

// 子类
class Dog extends Animal {
   // 实现抽象方法
   public void sound() {
      System.out.println("Dog is barking.");
   }
}

// 子类
class Cat extends Animal {
   // 实现抽象方法
   public void sound() {
      System.out.println("Cat is meowing.");
   }
}

public class Main {
   public static void main(String[] args) {
      Animal dog = new Dog();
      dog.sound(); // 输出: Dog is barking.
      dog.sleep(); // 输出: Animal is sleeping.

      Animal cat = new Cat();
      cat.sound(); // 输出: Cat is meowing.
      cat.sleep(); // 输出: Animal is sleeping.
   }
}

在上面的示例中,Animal 是一个抽象类,其中包含了抽象方法 sound() 和非抽象方法 sleep(),Dog 和 Cat 都是 Animal 的子类,它们必须实现抽象方法 sound()

通过创建Animal类型的对象引用 dogcat,并调用其相应的方法,可以看到不同子类对象的不同行为。

抽象类是一种特殊的类,不能被实例化,只能被继承,它提供了一种机制来定义类的接口和规范,实现了代码的复用性和扩展性。


二、什么是接口

在 Java 中,接口是一种抽象的类型,它定义了一组方法的签名,但没有实现这些方法的具体实现代码

接口可以被类实现,一个类实现了接口后,就必须实现接口中定义的所有方法。

下面是一个简单的示例代码,展示了一个名为Shape的接口,请同学们复制到终端执行。

代码语言:javascript
复制
// 定义一个 Shape 接口
interface Shape {
    double getArea();  // 获取形状的面积
    double getPerimeter();  // 获取形状的周长
}

// 实现 Shape 接口的圆形类
class Circle implements Shape {
    private double radius;
    
    public Circle(double radius) {
        this.radius = radius;
    }
    
    public double getArea() {
        return Math.PI * radius * radius;
    }
    
    public double getPerimeter() {
        return 2 * Math.PI * radius;
    }
}

// 实现 Shape 接口的矩形类
class Rectangle implements Shape {
    private double width;
    private double height;
    
    public Rectangle(double width, double height) {
        this.width = width;
        this.height = height;
    }
    
    public double getArea() {
        return width * height;
    }
    
    public double getPerimeter() {
        return 2 * (width + height);
    }
}

public class Main {
    public static void main(String[] args) {
        Circle circle = new Circle(5.0);
        System.out.println("圆形的面积:" + circle.getArea());
        System.out.println("圆形的周长:" + circle.getPerimeter());
        
        Rectangle rectangle = new Rectangle(3.0, 4.0);
        System.out.println("矩形的面积:" + rectangle.getArea());
        System.out.println("矩形的周长:" + rectangle.getPerimeter());
    }
}

在上面的代码中,我们定义了一个名为 Shape 的接口,其中包含了获取形状面积和周长的方法。

然后我们创建了两个类 CircleRectangle,它们都实现了 Shape 接口,必须实现接口中的方法。

最后,在主函数中我们创建了一个 Circle 对象和一个 Rectangle 对象,并分别调用了它们的 getAreagetPerimeter 方法来获取面积和周长。


三、抽象类和接口的区别

在 Java 中,抽象类和接口都是用来实现类和类之间的关系,但它们有一些区别。

  1. 实现方式
    • 抽象类是一种普通的类,可以包含成员变量、构造方法、普通方法、抽象方法等,并且可以有方法的实现代码。
    • 接口是一种特殊的类,只能包含常量和抽象方法,不能有成员变量和方法的实现代码。
  2. 继承关系
    • 一个类只能继承一个抽象类,通过使用关键字 extends 来实现继承。
    • 一个类可以实现多个接口,通过使用关键字 implements 来实现接口。
  3. 方法定义
    • 抽象类中的抽象方法可以有方法体,也可以有普通方法的实现代码。
    • 接口中的方法都是抽象方法,没有方法体,只有方法的签名。
  4. 用途
    • 抽象类用于表示一种通用的概念,可以包含通用的属性和方法,同时也可以定义一些抽象方法,由子类去实现。
    • 接口用于定义一组操作,表示一种行为的能力,通过实现接口来表示类具有某种行为的能力。

总之,抽象类和接口都是用于实现类和类之间的关系,抽象类更适合用于定义通用的属性和方法,而接口更适合用于定义行为的能力,在使用时,应根据具体的需求和设计目标选择合适的抽象类或接口。


四、抽象类和接口的面试题

  1. 抽象类和接口的区别是什么?它们何时使用?
  2. 一个类可以同时继承抽象类和实现接口吗?为什么?
  3. 抽象类是否可以没有抽象方法?接口是否可以没有方法?
  4. 抽象类和接口的成员变量有什么区别?
  5. 接口可以继承接口吗?抽象类可以继承抽象类吗?
  6. 在接口中,可以定义静态方法吗?在抽象类中呢?
  7. 抽象类和接口在多态性方面有何不同?
  8. 为什么 Java 中不支持多继承?接口是如何解决这个问题的?
  9. 在 Java 8 中,接口添加了哪些新特性?
  10. 什么情况下应该使用抽象类,什么情况下应该使用接口?

五、总结

本文讲解了 Java 中抽象类和接口的概念及语法,并给出了样例代码,在下一篇博客中,将讲解 Java 内部类的知识点。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-08-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、什么是抽象类
  • 二、什么是接口
  • 三、抽象类和接口的区别
  • 四、抽象类和接口的面试题
  • 五、总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档