gpt4 book ai didi

java - 更换开关盒 : interface vs abstract class

转载 作者:行者123 更新时间:2023-12-04 12:33:14 25 4
gpt4 key购买 nike

我有一个包含 switch 语句的代码,并希望改进设计。
有接口(interface)和抽象类的方式。
我想知道哪种方式更好,为什么?
我有以下类(class):

enum MovieChargeType {regular, new_release }

class Movie {
public MovieChargeType type;
public double get_price(){
switch (type){
case regular: //return regular price
case new_release : // return new_release price }
}

}
所以我决定使用两种方式改进设计:
1 路 - 接口(interface)
Interface MovieType{
public double get_price();
}

class RegularMovie implements MovieType{
public double get_price(){
// return regular price
}
}

class NewMovie implements MovieType{
public double get_price(){
// return new price
}
}

class Movie{
public MovieType type;
public double get_price(){
type.get_price();
}

}
2 路 - 抽象类:
abstract class Movie {
public MovieChargeType type;
public abstract double get_price();

}

class RegularMovie extends Movie{
public double get_price(){
// return regular price
}
}

class NewMovie extends Movie{
public double get_price(){
// return new price
}
}
我想知道在这种情况下哪个更好?
我注意到人们倾向于使用界面,但有人可以解释为什么吗?

最佳答案

I want to know which one is better in such case? I've noticed that people tend to go with interfaces but can someone explain why?


继承依赖是所有依赖中最强的,因为你的子类继承了你的父类拥有的所有依赖。例如。如果父类依赖于某个库,则您的子类只能在该库位于类路径上时使用。也许您之前在 IDE 中遇到了从类文件中间接引用的错误。发生此错误的原因是您的父类的依赖项不在编译类路径上。
这就是为什么大多数开发人员倾向于使用接口(interface)并保持接口(interface)签名尽可能简单的原因。我的意思是你不应该在接口(interface)的签名中使用任何库类。仅使用 POJO,以便您的接口(interface)仅依赖于纯 Java,而不依赖于其他库。
抽象类当您想要实现 template method 时可能非常有用图案。模板方法定义了一个可以被子类扩展的抽象算法。它们只是覆盖或实现父类的抽象方法。抽象类可以实现行为。因此,如果您的所有子类都有一个共同的行为,那么抽象类可能是不错的选择。但请记住,抽象应该是稳定的。如果您有经常更改的抽象,您的所有子类都会受到影响。这个问题会随着层次结构的增加而急剧增加,并使您的代码难以维护。一个好的规则是,一个类在你的层次结构中越高,它就必须越稳定。

关于java - 更换开关盒 : interface vs abstract class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63592718/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com