初学Java不太理解Oracle为什么要设计抽象

初学Java不太理解Oracle为什么要设计抽象

抽象的作用:
定义了子类的属性和方法,不提供实现而交由子类重写

我的思考:
网上对抽象类设计的分析有很多,不是太有说服力,几乎就是重述抽象的作用
对我来说,抽象类现在最特殊的一点是,它可以强制子类重写方法

我的问题:
目前抽象表现出的作用,完全可以由继承完成,写个空实现或者return个返回值并不是太麻烦的事,交给子类重写不就够了吗,那么Java设计抽象类更深层的含义是什么?

我希望各位大大能帮助我,有些东西必须实践后才明白,老师又不太愿意回答这种问题,拜托各位了

PS:如果您和我一样也是初学者,欢迎和我一起讨论,抽象的语法和功能还是不要补充了,我更想把主要问题搞清楚,谢谢啦

//继承
class Super{
    void method(){}
}
class Sub extends Super{
    void method(){}
}

//抽象
abstract class Super{
    abstract void method();
}
class Sub extends Super{
    void method(){}
}

抽象类的概念

   在继承的层次结构中,每个子类的行为(功能实现)会越来明确,如果追溯到父类,类会变得更通用,更加不明确。类的设计应该确保父类包含它的子类的共同特性。有时候,一个父类设计的非常抽象,以至于没有任何具体的实例,这样的类称为抽象类

  Java中允许在类中只声明方法而不提供方法的实现。这种只有声明而没有方法体的方法成为抽象方法,而包含一个或者多个抽象方法的类称为抽象类。
抽象方法是通过指定abstract关键字来创建。抽象方法没有内容,因此不需要被父类执行。

  抽象类是为了把子类中具有共同特性但是实现细节不同的东西提取出来,达到代码复用的目的。抽象方法的具体实现在子类中(注意:如果定义了一个抽象类,当子类继承一个抽象类时,子类要重写父类中的所有抽象方法,否则需要将子类也声明为abstract抽象类。)

抽象类需要注意几点:

(1)一个抽象类只关心是否具有某种功能,而不关心功能的具体实现,功能的具体行为和属性由子类负责实现,所以抽象类不能被实例化。因为抽象类中方法未具体化,这是一种"不完整"的类,直接实例化也就没有意义。

(2)抽象类中不一定要包含抽象(abstract)方法。抽象类中可以没有抽象方法。但是一旦类中包含lrc歌词下载了抽象方法,那类该类必须声明为抽象类。

(3)抽象类中不一定只有抽象方法,可以有普通方法。抽象类通过子类来调用和实现抽象方法和普通方法。

发布了7 篇原创文章 · 获赞 1 · 访问量 114

猜你喜欢

转载自blog.csdn.net/liuji0517/article/details/104296404