抽象:
关键字: abstract
抽象的由来:
1.多个子类中有相同声明的方法,但是方法体不一样,父类抽取该方法之后,无法书写方法体。
2.因为父类中的方法如果没有方法体看起来很奇怪,所以索性就省略方法体,使用";"结束,但是由于程序无法识别,所以使用关键字abstract修饰没有方法体的方法
3.程序使用abstract修饰的方法是没有方法体的抽象方法,没有使用abstract修饰的方法是普通的成员方法
4.因为一个普通事物描述类中无法存放抽象方法,所以要想放抽象方法,该类也需要使用abstract关键字描述为:抽象类
抽象可以用来描述类和方法:
--抽象类:public abstract class 类名{
类的资源
}
--抽象方法: public abstract 返回值类型 方法名(形式参数列表);
注意:1.定义抽象类时:abstract放在public和class之间, 定义抽象方法时 abstract放在public和返回值类型之间。
2.抽象方法没有方法体,直接使用分号结束
抽象的使用:
1.一般是把抽象类当作父类,普通类当作子类,由子类继承父类
注意:1.当普通类继承了抽象父类时,必须 1.重写抽象父类中所有的抽象方法(常用) / 将该子类也描述为抽象类
2.抽象类中不一定有抽象方法,当一个类中有抽象方法,那么该类一定是抽象类 / 接口 接口 :中也可以放抽象方法 (待会再学)
3.抽象类虽然有构造方法,但是不能直接创建抽象类对象
抽象类中可以具有的资源:
自定义常量: 可以有 / 可以没有
普通成员变量: 可以有 / 可以没有
普通成员方法: 可以有 / 可以没有
静态成员变量: 可以有 / 可以没有
静态成员方法: 可以有 / 可以没有
构造方法: 可以有 / 可以没有
抽象方法: 可以有 / 可以没有
如何调用抽象类中的资源:
1.使用抽象父类名直接调用静态资源,非静态资源调用不了。
2.要想调用抽象父类中所有的资源,需要通过抽象类的子类对象去实现
步骤:
1.创建一个子类,子类继承该抽象父类
2.子类重写抽象父类中所有的抽象方法
3.在测试方法中创建子类对象
4.通过子类对象调用父类中所有非私有的资源
抽象类中的构造方法的作用:
现象:1.抽象类中的构造方法,在测试类中无法被使用/调用
2.抽象类中可以有构造方法
抽象类中的构造方法的作用?
1.不是为了创建父类对象,因为根本就创建不了抽象类的对象
2.做参数的传递
说明:抽象父类中的构造方法可以将子类的参数传递到爷爷类,抽象类中的构造方法此时充当的是参数传递的桥梁
-- 构造方法也可以继承使用,例如:super(age);