父类和接口的区别

文章介绍了接口和父类在面向对象编程中的概念,包括父类作为超类被继承,提供属性和方法的重用,以及接口作为规范定义了抽象方法。两者的主要区别在于继承关系、多继承和抽象程度不同。接口不能被继承,但一个类可以实现多个接口,而父类可以是一个抽象类,一个类只能继承一个父类。正确使用接口和继承可以提高代码的扩展性和可维护性。
摘要由CSDN通过智能技术生成

        ~~~~~~~        当涉及到类的设计时,接口(interface)和父类(parent class)都是面向对象编程中的重要概念,接下来笔者将会介绍一下他们的概念以及具体的区别在哪里

        ~~~~~~~        如果对于继承和封装还不太懂的朋友,可以先看看这一篇博客继承与封装

1. 概念

1.1 什么是父类

        ~~~~~~~        父类通常指的是类继承中的父类或超类,即一个类派生出子类,子类继承了父类的属性和方法。父类是被继承的类,可以被多个子类继承。父类中定义的属性和方法可以在子类中直接使用,也可以被子类重写或扩展。通过继承,可以实现代码的重用和提高代码的可维护性。

1.2 什么是超类

        ~~~~~~~        超类(superclass)是指在类继承中被继承的类,也称为父类(parent class)。一个子类(subclass)可以继承它的一个或多个超类,从而继承超类的属性和方法。

        ~~~~~~~        在面向对象编程中,类继承是一种重要的特性,通过继承,子类可以继承超类的所有公有属性和方法,并且可以扩展或重写这些属性和方法。超类提供了一种模板或框架,可以在子类中重用和扩展代码,减少了代码的冗余和提高了代码的可维护性。

        ~~~~~~~        例如,假设我们有一个超类Animal,它有属性name和age,还有方法eat()和sleep()。现在我们有两个子类Dog和Cat,它们都继承了Animal类。子类可以通过关键字"extends"来继承超类。在这个例子中,Dog和Cat都拥有name和age属性,以及eat()和sleep()方法。在子类中还可以添加新的属性和方法,或者重写超类中的方法,实现更加丰富的功能。

        ~~~~~~~        总之,超类是类继承中被继承的类,它提供了一种重用代码的方式,使得代码更加简洁和易于维护。

其实父类和超类是同一个概念

1.3 什么是接口

        ~~~~~~~        接口是一种规范或协议,定义了一组抽象的方法或属性,没有具体的实现。接口可以被类实现,实现了接口的类必须实现接口中定义的所有方法或属性。接口的作用是规范类的行为,使得类具有相似的功能或特性。通过实现接口,可以实现代码的扩展性和灵活性。

2. 二者的横向对比

2.1 三大区别

        ~~~~~~~        看了上面的概念肯定还是不能完全理解二者的去呗,所以接下来将二者进行横向对比,并且会给出具体的代码,方便大家理解

  1. 继承关系的不同:父类是通过继承来实现代码重用的机制,子类可以继承父类的属性和方法,并且可以扩展或重写这些属性和方法。而接口不同于父类,它只定义了一组规范和契约,子类必须遵循这些规范并实现接口中定义的所有方法
  2. 多继承的不同:在Java和许多其他面向对象编程语言中,一个类只能继承一个父类,但是可以实现多个接口。这是因为接口只包含方法的声明,而不包含实现。因此,通过实现多个接口,一个类可以实现多个不同的规范和功能。
  3. 抽象类的不同:父类可以是一个具体的类,也可以是一个抽象类,而接口只能包含方法的声明,它不能包含成员变量和方法的实现。因此,接口可以看作是一种完全抽象的类,子类必须实现接口中的所有方法,从而达到接口规定的功能。

2.2 用例子解释区别

下面是一个简单的例子,用来说明接口和父类的区别:

public interface Animal {
    public void eat();
    public void sleep();
}

public class Cat implements Animal {
    public void eat() {
        // 实现Animal接口中的eat()方法
    }
    public void sleep() {
        // 实现Animal接口中的sleep()方法
    }
}

public class Pet extends Animal {
    // 报错,因为Animal是一个接口而不是类,不能被继承
}

        ~~~~~~~        在这个例子中,Animal是一个接口,定义了eat()和sleep()两个方法。Dog类尝试继承Animal接口,但是会报错,因为接口不能被继承。Cat类实现了Animal接口,并实现了其中的两个方法。

3. 如何正确使用

3.1 单个使用

        ~~~~~~~        上面的代码其实就很好的展示了我们该如何使用接口和继承,需要注意以下的一些内容即可

        ~~~~~~~        在Java中,extends关键字用于实现继承,而implements关键字用于实现接口。如果你需要创建一个新的类,并且希望它具有某个类的属性和方法,那么你应该使用extends来实现继承。如果你需要定义一个规范或契约,描述类应该具有的行为,那么你应该使用interface来定义接口。

        ~~~~~~~        当你需要创建一个类的层次结构,并且想让子类继承父类的属性和方法时,应该使用extends。例如,如果你要创建一个Animal类,并且要让Dog和Cat类继承Animal类的属性和方法,那么你应该使用extends。

        ~~~~~~~        当你需要定义一组规范或契约,并且希望类实现这些规范或契约时,应该使用interface。例如,如果你要定义一个Shape接口,描述所有形状都应该具有的行为,例如获取面积和周长,那么你应该使用interface。

3.2 同时使用

        ~~~~~~~        如果你需要在一个类中继承另一个类的属性和方法,并且同时需要实现一个或多个接口中定义的方法,那么可以使用extends和implements组合的方式。例如,如果你要创建一个Dog类,它继承Animal类的属性和方法,并实现一个Speak接口,描述Dog类应该具有的叫声行为,那么你可以这样定义:public class Dog extends Animal implements Speak。

简单来说,interface来定义接口,implements用来实现接口,entends用来继承

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值