/** * 抽象类: * 1、什么是抽象类? * 类和类之间具有共同特征,将这些共同特征提取出来形成的类就是抽象类。 * 因为类本身就是不存在的,所以抽象类不能创建对象(也可以说是:抽象类无法实例化) * 2、抽象类属于什么类型? * 抽象类也属于引用数据类型。 * 3、抽象类怎么定义? * 语法:[修饰符列表] abstract class 类名{ * 类体; * } * 4、抽象类是无法实例化的,无法创建对象,所以抽象类是用来被子类继承的 * 5、final和abstract不能联合使用,这两个关键字是对立的 * 6、抽象类的子类还可以是抽象类、也可以是非抽象类。 * 7、抽象类虽然无法实例化,但是抽象类有构造方法,这个构造方法是供子类使用的 * 8、抽象类关联到一个概念:抽象方法,什么是抽象方法? * 抽象方法表示没有实现的方法,没有方法体的方法。例如: * public abstract void doSome(); * 抽象方法的特点: * - 没有方法体,以分号结尾。 * - 修饰符列表中有abstract关键字。 * 9、抽象类中不一定有抽象方法,但是抽象方法一定是出现在抽象类中。 * 10、一个非抽象类继承一个抽象类,必须对抽象类中的抽象方法进行覆盖/重写/实现。 * 11、抽象类的作用: * 降低接口实现类与接口之间实现难度 * 实现类中不需要的接口中的方法,可以由抽象类去继承,实现类再去继承抽象类,实现类就可以不去实现该方法。 */ /* 实例: 需求: (1)定义一个抽象类Weapon,该抽象类有两个抽象方法attack(),move() 这两个方法分别表示武器的攻击方式和移动方式。 (2)定义3个类:Tank,Fighter,WarShip都继承自Weapon, 分别用不同的方式实现Weapon类中的抽象方法。 编写测试程序main方法,创建多个不同武器的实例。并分别调用attack()和move()方法。 能用多态尽量使用多态。 */ public class AbstractText { public static void main(String[] args) { //创建不同的武器装备 //创建坦克(父类型引用指向子类型对象 多态) Weapon w1 = new Tank(); //创建攻击机(父类型引用指向子类型对象 多态) Weapon w2 = new Fighter(); //创建军舰(父类型引用指向子类型对象 多态) Weapon w3 = new WarShip(); //调用方法 w1.attack(); w1.move(); w2.attack(); w2.move(); w3.attack(); w3.move(); } } /* 程序运行输出结果: 坦克发射炮弹,开始攻击! 坦克移动,开始转移阵地! 攻击机发射导弹,开始发动攻击! 攻击机进入跑道,准备起飞! 军舰发射远程导弹,发动攻击! 军舰起锚,开始远航! */ //武器类(抽象类 父类) abstract class Weapon{ //攻击的方法(抽象方法) public abstract void attack(); //移动的方法 public abstract void move(); } //坦克类(非抽象类 子类 继承武器类) class Tank extends Weapon{ //重写父类方法 @Override public void attack() { System.out.println("坦克发射炮弹,开始攻击!"); } //重写父类方法 @Override public void move() { System.out.println("坦克移动,开始转移阵地!"); } } //攻击机类(非抽象类 子类 继承武器类) class Fighter extends Weapon{ //重写父类方法 @Override public void attack() { System.out.println("攻击机发射导弹,开始发动攻击!"); } //重写父类方法 @Override public void move() { System.out.println("攻击机进入跑道,准备起飞!"); } } //军舰类(非抽象类 子类 继承武器类) class WarShip extends Weapon{ //重写父类方法 @Override public void attack() { System.out.println("军舰发射远程导弹,发动攻击!"); } //重写父类方法 @Override public void move() { System.out.println("军舰起锚,开始远航!"); } }
关于抽象类和抽象方法
于 2022-11-28 06:55:48 首次发布
本文通过一个实例展示了抽象类在Java中的应用,定义了一个抽象类Weapon,包含两个抽象方法attack()和move()。三个子类Tank、Fighter和WarShip继承了Weapon并实现了这两个方法。在main方法中,使用多态创建了不同武器的实例,并调用了它们的attack()和move()方法,展示了抽象类和多态的特性。
摘要由CSDN通过智能技术生成