Oop 使用抽象类与常规类的好处

Oop 使用抽象类与常规类的好处,oop,class,abstract-class,abstract,Oop,Class,Abstract Class,Abstract,我决定自己开始做一些小的编码项目,关注代码质量而不是代码数量,并且对抽象类的使用有疑问 现在我知道了抽象类和接口之间的区别,最大的区别(我认为)是接口只允许定义需要由类使用接口实现的方法,抽象类允许定义方法和成员以及默认方法实现(如果需要)。我的问题是,与普通类相比,使用抽象类的主要好处是什么?我能想到的两者之间唯一的真正区别是,您不能创建抽象类的实例。这两个类之间还有其他区别吗?抽象类可用于在基于OOP的“库”中存储方法;由于类不需要实例化,而且对它来说没有什么意义,因此将公共静态方法保留在抽

我决定自己开始做一些小的编码项目,关注代码质量而不是代码数量,并且对抽象类的使用有疑问


现在我知道了抽象类和接口之间的区别,最大的区别(我认为)是接口只允许定义需要由类使用接口实现的方法,抽象类允许定义方法和成员以及默认方法实现(如果需要)。我的问题是,与普通类相比,使用抽象类的主要好处是什么?我能想到的两者之间唯一的真正区别是,您不能创建抽象类的实例。这两个类之间还有其他区别吗?

抽象类可用于在基于OOP的“库”中存储方法;由于类不需要实例化,而且对它来说没有什么意义,因此将公共静态方法保留在抽象类中是一种常见做法。

除了不能创建抽象类的实例外,有些语言可能支持在抽象类中使用抽象方法-类似于接口,抽象方法必须由从抽象类继承的类实现


在我看来,抽象类的主要好处是如果有一些代码必须在相同类型的类之间共享。通常,您可以使用一个接口来实现这一点,但有时这些类的功能可能会重叠,最终导致代码重复。在这种情况下,您可以使用一个抽象类,只需将代码放在那里。

严格地说,从设计的角度来看,最好是简化事情。我相信简化事情的最好方法是用一个简单的类比。让我们用一个鸟的比喻

接口:当您想要强制执行某些需要定义的函数时,请使用此选项。e、 g.IBird与IBird和Fly(接口功能)签订了合同。但您可以更具体地使用一个具有运行契约的IOstrich。你也可能有一个IHawk有攻击合同…等等

摘要:当您希望强制执行基函数并具有基属性时,请使用此选项。e、 鸟类可能是鸟类的一个基本类群,它可能具有一种叫做LayEgg的功能,以及一种叫做年龄、物种、小鸡数量等的属性。这些事情不会/不应该改变鸟类的行为,因为所有鸟类都会产卵……等等。但并非所有的鸟在尖叫或以同样的方式飞行时听起来都一样(有些甚至不飞)…等等。。。。因此,它们应该通过接口实现。

这可能会帮助您, 让我们考虑可以使用任何类型的车辆的旅行者,如汽车、自行车、自行车等。 但所有车辆都以相同的方式行驶,速度限制不同,所以我们可以有一个

abstract class Avehicle    
{  
        string fuel;  
        public void move()  
{  
 sysout("moving");  
}   
} 
但所有车辆的制动系统是不同的

interface Ivehicle    
{  

        public void breakorstop();  
}  
class Traveler    
{  
  Ivehicle v; 
//Settrers and getters   
 public drive()  
{  
v.move();  
}  
public break()  
{  
v.breakorstop();  
}  
}
所以最后
Car、Cycle或Bike类可以扩展avehichle并实现车辆接口,在OO世界中,抽象类用于施加一些设计和实现约束。没别的了。在任何情况下都不必使用抽象类。但在某些情况下,您最好施加这些约束。那么它们是什么呢?让我们通过比较它的oo对应项来看看

抽象类与接口

正如您所知,这是继承的两个主要概念

基本上,接口只是用来声明您愿意继承底层服务,仅此而已。不包含任何实现&没有任何功能。从这个意义上说,接口是抽象的。这就是为什么它更多的是设计约束而不是实现约束。想象一下扬声器上的耳机插孔。每个耳机都需要实现插孔接口(具有启动、停止、收听、关闭、打开方法)。每个耳机都应覆盖此接口,以继承扬声器提供的功能并相应地实现

另一方面,抽象类可能包括带有实现的方法。这是基本的区别,从这个意义上讲,它可以利用重用而不仅仅是一个接口。此外,它们可能包含您无法通过接口访问的私有、受保护和非静态字段。您可以强制子类使用抽象方法(那些没有实现的方法)实现一些必备功能。抽象类比接口更灵活

当然,更不用说,您只能在java中扩展一个类,在这个类中可以实现许多接口

抽象类与常规类的比较


那么为什么不使用常规类呢。使用抽象类有什么好处?这很简单。如果使用抽象类,则强制子类实现核心功能。作为开发人员,您不需要记住您应该实现基本功能。这是抽象类对常规类施加设计约束的地方。另外,通过将类抽象化,可以避免意外创建(不完整的)类。

抽象类与常规类与接口。
抽象类通常支持泛化的思想,并通过设计多年的项目来帮助程序员保持相当小的大脑纪律,因为当包含抽象方法时,必须描述在子类中抽象方法的实现,当开发人员拥有zeitnot时,此功能对于短期项目是一个缺点。

将类声明为抽象类的唯一原因是它无法实例化。在某些情况下,您将拥有在多个类之间共享的公共功能,但公共功能本身并不表示对象或表示不完整的对象。在这种情况下,您将公共功能定义为抽象功能,这样它就不能是实例
abstract class Test
{
    abstract void show();//method provided
}
class Child extends Test
{
    void show()//coding 
    {
        System.out.println("saurav");
    }
}
class main
{
    public static void main(String[] args) 
    {
    Test c = new Child();
    c.show();   
    }
}