P406 Java接口使用细节,区分接口与继承,接口的多态

Java接口使用细节

1)接口不能被实例化。

2)接口中所有的方法是public方法,接口中抽象方法可以不用abstract修饰。

3)一个普通类实现接口,就必须将接口里的所有方法实现。

4)抽象类实现接口,可以不用实现接口里的方法。

5)一个类可以同时实现多个接口。

6)接口中的属性只能是final的,而且是public static final 修饰符。

//例如

interface A{

        int a = 10;  //实际是public static final,且必须初始化。 

}

7)接口中属性的访问形式:接口名.属性名

8)一个接口不能继承其它的类,但可以继承多个别的接口。

//举例

interface B{ };

interface C{};

interface A extends B,C{};

9)接口的修饰符只能是public和默认,这点和类的修饰符是一样的。 

区分接口与继承

在面向对象编程(OOP)中,接口(Interface)和继承(Inheritance)是两个重要的概念,用于实现代码的重用和扩展性。然而,它们之间有一些关键的区别。

继承(Inheritance)

  • 定义:继承是面向对象编程中的一个主要特性,它允许一个类(称为子类或派生类)继承另一个类(称为父类或基类)的属性和方法。
  • 特点
    • 子类可以访问父类的所有公共和保护成员(属性和方法)。
    • 子类可以重写父类的方法(通过提供自己的实现)。
    • 继承可以实现代码的重用和扩展性。
    • 继承是“is-a”关系的一个表示,即子类“是”父类的一种特殊类型。
  • 使用场景:当你想要创建一个新类,而这个类与另一个已存在的类有很多相似之处时,你可以使用继承。

接口(Interface)

  • 定义:接口是一种完全抽象的类,它只包含抽象方法和常量的集合。一个类可以实现一个或多个接口,从而必须提供接口中所有方法的实现。
  • 特点
    • 接口不能被实例化。
    • 接口中的方法都是抽象的,没有方法体。
    • 一个类可以实现多个接口。
    • 接口是“has-a”关系的一个表示,即一个类“有”接口所定义的某些行为或属性。
    • 接口提供了一种方式来定义一组方法的契约,而无需关心这些方法的具体实现。
  • 使用场景
    • 当你想要确保某个类具有一组特定的方法时,可以使用接口。
    • 当你想实现多重继承的效果(但大多数面向对象语言不支持多重继承)时,可以使用接口。
    • 接口是实现插件式架构或组件化编程的基础。

接口与继承的对比

  • 灵活性:接口比继承更灵活。一个类可以实现多个接口,但只能继承一个类(在大多数面向对象语言中)。
  • 耦合度:继承通常会增加类之间的耦合度,因为子类依赖于父类的实现。而接口只定义了方法的契约,不关心实现,因此减少了耦合度。
  • 扩展性:接口允许在不修改现有代码的情况下添加新的行为。而继承在添加新功能时可能需要修改父类或子类。
  • 复用性:虽然继承可以实现代码重用,但接口通过定义方法的契约来实现更高级别的复用,因为它允许不同的类以相同的方式实现这些方法。
  • 目的:继承主要用于实现代码重用和扩展现有类的功能。而接口主要用于定义一组方法的契约,并确保实现该接口的类都遵循这些契约。

接口的多态

接口多态特性

1)多态参数

在前面的Usb接口案例,Usb usb既可以接收手机对象,又可以接收相机对象,就体现了接口的多态。(接口引用可以指向实现了接口的类的对象)

2)多态数组
package com.Interface;

public class InterfacePloyFace {
    public static void main(String[] args) {
        IF[] ifs = new IF[2];
        ifs[0] = new Phone_();
        ifs[1] = new Camera_();
        for (int i = 0; i < 2; i++) {
            ifs[i].work();
            //判断,向下转型
            if(ifs[i] instanceof Phone_){
                ((Phone_) ifs[i]).call();
            }
        }
    }
}
interface IF{
    void work();
}
class Phone_ implements IF{
    @Override
    public void work() {
        System.out.println("手机开始工作...");
    }
    public void call(){
        System.out.println("手机通话中...");
    }
}
class Camera_ implements IF{
    @Override
    public void work() {
        System.out.println("相机开始工作...");
    }
}
3)接口多态传递 
package com.Interface;

public class InterfacePloyPass {
    public static void main(String[] args) {
        Gi aa = new AA();
        //Gi继承了Hi,则AA实现Gi的同时也实现了Hi
        Hi bb = new AA();
    }
}
interface Hi{};
interface Gi extends Hi{};
class AA implements Gi{};
  • 17
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值