ArrayList<string> list=new ArrayList<>();和 List<String> list = new ArrayList<>();之间有什么区别

ArrayList list=new ArrayList<>();和 List list = new ArrayList<>();之间有什么区别

list 和 ArrayList 之间的关系
    List是一个接口(抽象类),所以需要具体的实现类,需要implements来实现。

    而ArrayList<>()是List的实现类,这应该Java里面的具体封装好了的。

    List list = new ArrayList<>();这段代码这是表示接口list被 ArrayList类实现。因为List接口本身是一个特殊的类,无法自身创建对象,因此只能通过具体的实现类来实现。

    ArrayList<string> list=new ArrayList<>();这类似正常的类创建对象。只是这里的ArrayList被Java指定成了List的实现类。

    因此,他们之间的关系是实现和被实现关系。

为什么一般不用 ArrayList list=new ArrayList<>(),而用 List list = new ArrayList<>()?
    这里就体现了可替代性,如果直接写ArrayList<string> list=new ArrayList<>()这代码的话,

    这直接创建了一个具体实现类的数据结构对象,而且是具体的而不是抽象的。我觉得意思就是把写死了的意思。

    但如果使用List<String> list = new ArrayList<>(),这是接口被实体类实现了,

    而接口本身是抽象的,可以有多个实现,也可以变更实现方式,意思就是list可以在被ArrayList时,可以将其切换到不同的实现上。如果直接写了

    ArrayList<string> list=new ArrayList<>()时,之后再想转换该对象的数据类型泽比较麻烦。说到这就很清楚了。这也是使用List<String> list = new ArrayList<>()的原因之一。

    其二原因就是,List<String> list = new ArrayList<>()中,接口的对象只能调用被实现类实现的方法,而ArrayList里边独有的方法则不能被调用。提高代码可读性,也规范代码,同时减少编写代码时的错误。这里的接口调用逻辑和父类与子类之间的方法调用有些类似,上转型对象不能调用子类独有的方法,只能调用子类继承的方法。
切换到其他 List 实现代码示例
import java.util.List;
import java.util.ArrayList;
import java.util.LinkedList;

public class ListExample {
    public static void main(String[] args) {
        // 使用 List<String> 声明变量
        List<String> arrayListExample = new ArrayList<>();
        List<String> linkedListExample = new LinkedList<>();

        // 添加元素
        arrayListExample.add("Apple");
        linkedListExample.add("Banana");

        // 遍历并输出元素
        System.out.println("ArrayList Elements:");
        for (String fruit : arrayListExample) {
            System.out.println(fruit);
        }

        System.out.println("LinkedList Elements:");
        for (String fruit : linkedListExample) {
                System.out.println(fruit);
        }
    }
}
接口只能调用被实现类实现的方法

接口声明

public interface Animal {
void say();
void listen();
}

实现类

public class Dog implements Animal {
    @Override
    public void say() {
    System.out.println("say");
    }
    @Override
    public void listen() {
    System.out.println("listen");
    }
    public void run(){
    System.out.println("run");
    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值