面向对象编程接口与抽象类的区别和联系,子类继承父类和实现的接口有相同的方法名

面向对象编程,接口和抽象类的区别

面向对象编程中,接口和抽象类都是用来定义规范的概念,但它们之间有一些区别: 1. 接口是一些方法的集合,没有任何实现代码,所有方法都是抽象的。接口定义了一个对象应该具有哪些功能,但并不关心这些功能的实现。接口可以通过实现它的类来实现功能。 2. 抽象类是一个类,可以包含抽象方法和具体方法,但不能被实例化。抽象类定义了一个对象应该有哪些特征和行为,但是没有提供它们的具体实现。它可以通过子类来继承和实现抽象方法。 3. 类可以实现多个接口,但只能继承一个抽象类。 4. 还有一个关键的区别是,接口定义的方法必须公开,而抽象类的方法可以是公开或受保护的。 总的来说,接口与抽象类都是定义规范的方式,但它们强调的侧重点不同,接口强调某个对象应该具有哪些功能,而抽象类则强调某个对象应该具有哪些特征和行为。

面向对象编程,为啥要引用抽象类

抽象类存在的意义在于它提供了一种机制,可以定义一些方法的签名(即方法的名称、参数类型和返回类型),而不需要提供实现。这些未实现的方法被称为抽象方法。 通过定义抽象类和抽象方法,我们可以实现代码重用和多态性。具体来说,子类可以继承抽象类,并实现其中的抽象方法,从而获得相应的功能。这样,我们可以通过子类对象调用抽象父类中相同的方法,但得到不同的结果。这就是多态性的一种体现。 此外,抽象类还可以充当接口的作用。接口是一种特殊的抽象类,它只包含抽象方法和常量,没有实例变量。实现某个接口的类必须实现接口中的所有方法。通过定义接口或实现接口,我们可以实现模块化和角色分离,从而提高代码的可维护性和可重用性。 因此,在面向对象编程中,抽象类是非常重要的概念,它可以帮助我们实现多态性、接口和代码重用等功能

子类继承父类和实现的接口有相同的方法名

如果一个Java类既继承了一个具有run方法的类,又实现了一个具有run方法的接口,那么它必须重写run方法,以明确要执行哪个方法。

如果子类实现的接口和父类都具有相同的方法名和参数列表,则在子类中直接重写该方法即可。子类重写的方法会覆盖父类的方法,而这样做不会影响接口的实现。

如果子类继承的父类中已经实现了run方法,而子类又同时实现了包含run方法的接口,此时子类需要Override run方法,并且在Override的run方法中调用super.run()语句来显式地调用父类的run方法。这样就可以保证父类run方法中的逻辑会被执行,同时还可以实现接口中run方法的相关逻辑。
以下是一个简单的例子:

interface MyInterface {
    void run();
}

class MyThread extends Thread implements MyInterface {
    @Override
    public void run() {
        System.out.println("MyThread's run method");
    }
}

public class Main {
    public static void main(String[] args) {
        MyThread thread = new MyThread();
        thread.start();
    }
}

在这个例子中,MyThread继承了Thread类并实现了MyInterface接口,同时两者都有run()方法。然而,由于Thread类中的run()方法已经被重写了,所以MyThread类中的run()方法将会调用Thread类中的run()方法。如果我们想要调用MyInterface中的run()方法,可以通过多态实现。

interface MyInterface {
    void run();
}

class MyThread extends Thread implements MyInterface {
    @Override
    public void run() {
        System.out.println("MyThread's run method");
    }
}

public class Main {
    public static void main(String[] args) {
        MyInterface myThread = new MyThread();
        myThread.run(); // 调用MyInterface中的run方法
    }
}

在这个例子中,我们将MyThread对象转换为MyInterface类型并调用了run()方法。由于MyThread对象实现了MyInterface接口,我们可以使用多态来调用MyInterface中的run()方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值