本文共 1499 字,大约阅读时间需要 4 分钟。
抽象类:依然是一个类(描述事物群体),在继承中,父类将多个不同的子类中的共性内容进行抽取,形成多个子类的共同父类。在共同特定(属性、方法)进行抽象的时候,可能会出现某些体系结构中存在一些共性的行为(方法),但是不同的子类它们的共同的行为有些差异。这时共同行为依然需要在父类中描述,可是父类没有办法将方法的具体行为描述清楚。这时父类中就会有不具体的方法出现,这个类就变成抽象类。
abstract:用来修饰类或者方法(普通),被修饰的类为抽象类,被修饰的方法为抽象方法
抽象方法:没有方法体的方法。
// 抽象类的定义public abstract class 类名{ // 定义变量 // 定义方法 // 抽象方法 修饰符 abstract 返回值类型 方法名( 参数类型 变量名 , 参数类型 变量名 ) ; }
类中出现抽象方法,这个类必须是抽象类,否则编译报错。
/* * 类中有抽象方法,类就是抽象类 */abstract class Employee{ /* * 所有员工都具有工作的行为,需要将工作行为抽取到员工类中描述 * 但是每个员工的工作的具体内容不同,这时不能将方法体书写具体 */ public abstract void work() ;}/* * 程序员:工作内容:撸代码 * * 当父类中有了抽象方法,子类继承父类之后, * 子类需要将父类中的抽象方法全部复写 * 否则子类依然是一个抽象类 */class Coder extends Employee{ public void work() { System.out.println("撸代码"); }}/* * 经理:工作:管理 */class Manager extends Employee{ public void work() { System.out.println("管理"); } }public class AbstractDemo { public static void main(String[] args) { Coder c = new Coder(); c.work(); Manager m = new Manager(); m.work(); }}
抽象类能够new对象吗?
不可以。因为抽象类中可能会拥有抽象方法,如果能够new对象,那么通过引用可以调用抽象方法,而抽象方法没有方法体,那么调用抽象方法最终也不会有任何的结果。
抽象类拥有构造方法吗?
有,抽象类中的构造方法虽然不是给自己创建对象使用,但是子类在创建对象的时候,子类的构造方法中会有super语句找父类的构造方法。
抽象类一定是父类吗?
它是父类,但一定不是顶层父类(顶层Object类),它一定有子类,子类继承抽象类,然后在程序通过子类的对象使用方法。
抽象类中可以没有抽象方法吗?
可以。它的存在是为了不让创建这个类的对象。主要用在适配器设计模式中(类中的所有方法全部是空复写)。
抽象关键字不能和哪些关键字共存?
final:final修饰的方法为最终方法,子类不能复写,abstract关键字修饰方法必须要求子类复写。
private:私有的方法只能在本类中使用,子类无法继承到。
static:静态修饰的方法可以通过类名直接调用。而调用抽象方法没有意义。
转载地址:http://fqtgn.baihongyu.com/