Java中接口(instance)和继承(extends)与抽象(abstract)的区别与联系详细说明

1.接口

  1. 基本介绍:在Java中,接口是一种抽象类型,它定义了一组方法的规范,但没有具体的实现。接口可以看作是一种约定,它规定了实现该接口的类必须提供指定的方法。

  2. 语法:

    interface 接口名{
    		//属性,如int n1 = 1; 其等价于public static final int n1 =1;从这也可以看出,接口类中只有常量而没有变量
            //方法(在JDK1.8中包括抽象方法,默认实现方法,静态方法。而在JDK1.7中只有抽象方法)
    }
    
  3. 注意事项和细节
    (1)接口不能被实例化。因为说到底,接口是一种特殊的抽象类,因此不能被实例化
    (2)除了默认的方法和静态的方法,其他的都是抽象方法。抽象方法默认public,并且abstract也不用写,也是默认的。如void eat();等价于public abstract void eat();
    (3)一个普通类实现接口,就必须实现该接口的所有抽象方法。当然也可以将这个不同类声明抽象方法,那就可以不用实现该接口的抽象方法了
    (4)一个类可以同时实现多个接口,但是只能继承一个类,这里和继承有很大的区别
    (5)接口类中的属性访问形式只能通过接口名.属性名。因为接口类不能实例化
    (6)一个接口不能继承其他的普通类类,但是继承多个接口
    (7)接口的修饰符只能是public或默认的,这点和类一样。
    代码:

//接口USB
public interface USB {
    int n1 =1;//等价于public static final int n1 = 1;
    void work();
    default void work1(){
        System.out.println("我是work1");
    }
    static void worker(){
        System.out.println("我是work2");
    }
}
//Phone实现了接口
public class Phone implements USB{
    @Override
    public void work() {
        System.out.println("我是手机");
    }
}
//Ipad类实现了接口
public class Ipad implements USB{
    @Override
    public void work() {
        System.out.println("我是平板");
    }
}
//Computer类
public class Computer {
    public void work(USB usb){
        usb.work();
    }
}
//子类OldPhone继承了父类Phone
public class OldPhone extends Phone{
}
//测试类
public class Test {
    public static void main(String[] args) {
        Computer computer = new Computer();
        Phone phone = new Phone();
        Ipad ipad = new Ipad();
        computer.work(phone);//多态参数
        computer.work(ipad);//多态参数
        USB[] usbs = new USB[2];
        usbs[0] = phone;//多态数组
        usbs[1] = ipad;//多态数组
        usbs[0].work();
        usbs[1].work();
        OldPhone oldPhone = new OldPhone();
        oldPhone.work1();//多态的传递,Phone implements USB,OldPhone extends Phone,此时OldPhone也能调用USB中的方法
    }
}

2.接口VS继承
继承和接口是面向对象编程中的两种重要的机制,它们有以下区别和联系:

区别
(1)继承是一种类与类之间的关系,子类继承父类的属性和方法,可以直接使用父类的成员。而接口是一种类与接口之间的关系,类实现接口后,需要实现接口中定义的所有方法。
(2)一个类只能继承一个父类,但可以实现多个接口
(3)继承是一种"is-a"的关系,子类是父类的一种特殊类型。而接口是一种"has-a"的关系,类实现接口表示类具有某种能力或特征

联系:
(1)继承和接口都可以实现代码的重用和扩展。
(2)继承和接口都可以用于实现多态性,通过父类或接口类型的引用来引用子类或实现类的对象。
(3)继承和接口都可以用于定义规范和约束,使得代码更加规范和可维护。

小结:当子类继承了父类,就自动的拥有父类的功能。如果子类需要扩展功能,可以通过实现接口的方式扩展。可以理解为实现接口是对Java单继承机制的一种补充。

代码:

//接口Fish
public interface Fish {
     void swimming();
}
//接口Kangaroo
public interface Kangaroo {
    void jump();
}
```java
//父类Monkey
public class Monkey {
    private String name;

    public Monkey() {
    }

    public Monkey(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void climb(){
        System.out.println("天生会爬树");
    }

}
//子类SmallMonkey
public class SmallMonkey extends Monkey  implements Fish ,Kangaroo{
    @Override
    public void swimming() {
        System.out.println("学会了游泳");
    }


    @Override
    public void jump() {
        System.out.println("学会了跳");
    }
}
//测试类
public class Test {
    public static void main(String[] args) {
        SmallMonkey smallMonkey = new SmallMonkey();
        smallMonkey.climb();
        smallMonkey.swimming();
        smallMonkey.jump();
    }
}

3.接口VS抽象
区别:

构造器:
接口:不能有构造器,因为接口不能被实例化
抽象类:可以有构造器,用于子类的初始化。

继承:
接口:支持多继承,一个类可以实现多个接口
抽象类:只支持单继承,一个类只能继承一个抽象类。

字段:
接口:只能定义常量字段
抽象类:可以定义各种类型的字段,包括实例变量。

用法:
接口:适合描述类之间的共享协议、规范和契约,以及实现多继承。
抽象类:适合用于具有共同基础行为的类,并且可以包含一些通用的方法实现。

联系:
(1)都是用来实现代码的重用和封装,提供一种抽象的方式来定义类的行为。
(2)都不能被实例化,只能被子类实现或继承。
(3)都可以被用作其他类的类型。

何时使用接口类:
(1)当需要定义一组与具体实现无关的方法,以便不同类来实现相同的行为时。
(2)当类需要遵循多个协议或规范时,可以实现多个接口
(3)当需要为现有的类添加新的方法而不影响已有实现时,可以使用默认方法。
(4)当希望实现多重继承时,可以使用接口

何时使用抽象类:
(1)当需要创建一个基础类,它可以包含一些默认的实现,同时又要求子类提供特定的实现。
(2)当需要在多个类之间共享代码和行为时,可以将通用方法实现放在抽象类中
(3)当希望限制继承的数量(单继承)时,可以使用抽象类

总的来说,选择使用接口还是抽象类取决于您的设计需求。如果您需要定义一组共享的方法规范并允许多个实现,那么接口是一个不错的选择如果您需要提供默认的实现,并在基础类中包含共享代码,那么抽象类可能更适合。在一些情况下,您甚至可以将接口和抽象类结合使用,以实现更复杂的设计。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值