1.抽象类

为什么会有抽象类:

java定义一个汽车抽象类有抽象方法加油 java定义一个抽象类animal_抽象类

抽象类的写法:abstract关键字

java定义一个汽车抽象类有抽象方法加油 java定义一个抽象类animal_父类_02

Animal定义为抽象类后,Animal animal = new Animal();会报错;但,Animal one = new Cat()依旧是可以的。

抽象类或是,保证“逻辑意义”完美、提高java语言的简介和美观性,的一种辅助保障手段。

java定义一个汽车抽象类有抽象方法加油 java定义一个抽象类animal_子类_03

当父类定义成抽象类后,借由父类和子类的继承关系,可以限制子类设计随意性,同时又可以避免无意义父类的实例化。

这一点目前理解,可能和接口类似;

2.抽象方法

通过抽象类的理解,可以发现,父类仅仅是划定了一个大纲,具体方法的实现可以没有(即,抽象父类中没有方法提的方法,可以在子类中去具体实现)。即父类中的有些方法可以没有具体实现,即没有方法体。

java定义一个汽车抽象类有抽象方法加油 java定义一个抽象类animal_抽象类_04

这个时候,如果子类不重写eat()方法会报错。(除非将子类也定义成抽象类,并且子类中的eat()方法也定义成抽象方法。)

抽象方法可以认为是一种:子类必须具体实现父类抽象方法的一种提醒机制。

注:(1)包含抽象方法的类,一定得是抽象类;在一个抽象类中,可以没有抽象方法。

       (2)根据abstract的设计原则可以发现,static,final,private都不能与abstract共同使用。

java定义一个汽车抽象类有抽象方法加油 java定义一个抽象类animal_抽象类_05


Comments:

(1)象抽象类这种,父类引用指向子类实例对象的做法,是多态一种明显的体现。(20200914)

(2)抽象方法,更加体现了,父类“指导性,大纲性”的特点。即,子类必须重写抽象父类中的抽象方法,而父类引用指向子类对象,又可以调用子类重写父类的方法。由此,契合多态,,降低了父类的多余的预先动作,降低了父类的复杂程度。(20200914)


20210708注:因为,目前感觉,自己在实际开发中很少使用抽象类,所谓【多态部分】大都是接口来实现的;所以,这儿暂时做了一个【可以勉强安抚自己的说明】:

抽象类在实际中的使用:

java定义一个汽车抽象类有抽象方法加油 java定义一个抽象类animal_子类_06