代码之家  ›  专栏  ›  技术社区  ›  soufiane bouanani

为什么在Java中使用Interface作为类型而不是类本身?复制

  •  0
  • soufiane bouanani  · 技术社区  · 1 年前

    有人能告诉我为什么建议使用接口作为数据类型吗??

    我正在努力了解用Java设计健壮和可维护的软件系统的最佳实践。我遇到的一个概念是建议使用接口作为数据类型,而不是基类。然而,我很难理解这种方法背后的原因。

    根据我的理解,使用接口作为数据类型可以提供更多的灵活性和多态性,因为它使我能够处理任何实现接口的类。但我不相信这是唯一的原因,我想了解更多关于这种方法的好处。

    有人能解释为什么使用接口作为数据类型比使用基类更可取吗?这种方法是如何提高代码质量并尊重面向对象设计的SOLID原则的?

    我已经尝试过研究这个主题,但我仍然不清楚使用接口作为数据类型的优势。如果有任何见解或例子可以帮助我更好地理解这个概念,我将不胜感激。

    1 回复  |  直到 1 年前
        1
  •  0
  •   WJS    1 年前

    下面的一个例子,或者 list1 list2 可以用作display方法的参数。如果显式地使用它们的类类型,它将不起作用,因为您需要两个方法,一个用于 ArrayList 一个用于 LinkedList

    在这种情况下,如果您选择某个类的不同实现,这样就可以更好地维护代码,而不必进行多次更改 ArrayList 链表 .

    List<Integer> list1 = new ArrayList<>();
    List<Integer> list2 = new LinkedList<>();
    
    public <T> T void display(List<T> list) {
        System.out.printnln(list);
    }
    

    虽然与你的具体问题无关,但我使用了泛型 List<String> list3 也可能是一个论点 display .

    下面是更多 fun 实例注意,我可以将每个“动物”类分配到一个列表中 MealTime 因为它们各自实现该接口。否则,这些类只能分配给 List<Object> .

    interface MealTime {
        public String feedMe();
    }
    
    class Lion implements MealTime {
        private String food;
    
        public Lion(String food) {
            this.food = food;
        }
    
        public String feedMe() {
            return food;
        }
    }
    
    class Koala implements MealTime {
        private String food;
    
        public Koala(String food) {
            this.food = food;
        }
    
        public String feedMe() {
            return food;
        }
    }
    
    
    
    public static void main(String[] args) {
        List<MealTime> zoo = List.of(
                new Koala("Eucalyptus leaves"),
                new Lion("Eland meat"));
    
       FeedTheAnimals(zoo);
    }
    
    public static void FeedTheAnimals(List<MealTime> zoo) {
        for (MealTime animal : zoo) {
            System.out.println("I am feeding the "
                    + animal.getClass().getSimpleName() + " some " + 
                   animal.feedMe());
        }
    }
    

    打印

    I am feeding the Koala some Eucalyptus leaves
    I am feeding the Lion some Eland meat