抽象类与接口的异同点

本文探讨了Java中抽象类和接口的共同点和区别,包括它们的不可实例化、抽象方法、多态性支持,以及抽象类的实例变量、构造方法和接口的常量、默认方法等内容,强调了它们在代码设计中的角色和适用场景。
摘要由CSDN通过智能技术生成

结论

相同点:

  1. 都不能被实例化: 抽象类和接口都不能直接创建对象,它们只能被用作其他类的父类或接口。

  2. 都可以包含抽象方法: 抽象类和接口都可以包含抽象方法,即方法声明但没有具体实现,需要由子类或实现类提供具体实现。

  3. 都支持多态性: 抽象类和接口都可以通过子类或实现类实现多态性,子类或实现类可以根据需要覆盖抽象方法,实现自己的行为。

不同点:

  1. 成员变量: 抽象类可以包含实例变量(可以修改),而接口中只能包含常量(无法修改)

  2. 构造方法: 抽象类有构造方法,接口没有它更像是一种规范

  3. 继承与实现: 抽象类单继承,接口多实现

总的来说,抽象类更适合用于定义一种通用的结构或行为,并提供默认实现,而接口更适合用于定义一组抽象方法,以及为类提供一种契约。在设计中,抽象类通常用于具有相似特征的一组类之间的代码重用,而接口则用于描述类应该具有的行为特征,提高了代码的灵活性和可扩展性。

什么是抽象类

使用abstract修饰的类:我的理解是,java是一门面向对象的语言,类里面的成员就是来充实这个类的,抽象类就是允许类里面的成员抽象(可以理解为形式上的存在没有实体)的一种特殊的对象,故而捕捉不到实体无法实例化

什么是接口

我的理解是一中特殊的抽象类,一种代码规范思想

抽象内里面可以定义些什么

  1. 抽象方法
  2. 普通类里面可以定义的

抽象类里面的抽象方法一定不能使用private进行定义抽象方法(抽象方法都是需要重写的,如何私有化了那怎么重写)

abstract class AbstractClass {
    //这是一个抽象类中的抽象方法
    abstract void method01();

    public String name = "抽象方法";

    public void method02(){
        System.out.println("抽象方法中的普通方法");
    };

    //抽象类中的构造方法,可以用来初始化一些成员
    public AbstractClass(String name){
        this.name = name;
    }
    public AbstractClass(){
    }


}

接口里面可以定义什么

  1. 抽象方法
  2. 默认方法
  3. 静态方法
  4. 常量
  5. 内部接口
public interface InterfaceClass {
    String name = "我是一个接口中的变量";//静态常量

    void getRole();//接口中的抽象方法
    public abstract void  getRole2();//接口中的成员一般都会省略写修饰符(public abstract)

//    默认方法
      default void test() {
            System.out.println("我是接口中的默认方法");
      }
      //静态方法
      static void test2() {
            System.out.println("我是接口中的默认方法");
      }
    // 内部接口
      interface inside{
          void play();
      }
}

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
抽象类接口在C#中有以下异同: 相同: 1. 都不能被实例化,只能通过实现它们的子类或实现类来创建对象。 2. 子类或实现类必须实现抽象类接口中的所有方法才能被实例化。 3. 可以被其他类继承或实现。 异同: 1. 抽象类是特殊的类,可以包含成员变量、方法、属性等,而接口只能包含方法、属性、事件和索引器的声明。 2. 一个类只能继承一个抽象类,但可以实现多个接口。 3. 抽象类可以有方法的实现,而接口只能有方法的声明。 4. 抽象类可以有字段和构造函数,而接口不能有字段和构造函数。 5. 接口可以被其他接口继承,形成接口的继承链,而抽象类不能被继承。 总结来说,抽象类更适合用于定义一些具有共同特征的类的基类,而接口更适合用于定义一些行为的规范,使得不同的类可以实现这些规范。 #### 引用[.reference_title] - *1* [Java抽象类接口异同](https://blog.csdn.net/m0_64742984/article/details/124610167)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [C# 抽象类接口异同](https://blog.csdn.net/Monkey_Xuan/article/details/115915086)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值