关于抽象类和抽象方法

本文通过一个实例展示了抽象类在Java中的应用,定义了一个抽象类Weapon,包含两个抽象方法attack()和move()。三个子类Tank、Fighter和WarShip继承了Weapon并实现了这两个方法。在main方法中,使用多态创建了不同武器的实例,并调用了它们的attack()和move()方法,展示了抽象类和多态的特性。
摘要由CSDN通过智能技术生成
/**
 * 抽象类:
 * 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("军舰起锚,开始远航!");
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值