JAVA继承:奥特曼打小怪兽

一、继承的基础知识:

1.类的继承的作用:

        1)提高代码的重用性。

        2)提高程序的扩展性。

        简单来说,就是减少代码长度,减少工作量,工程量较小的时候,体现不出继承的优点,但是如果工程量很大的时候,比如,我们要写一个打怪升级的游戏的时候,游戏中存在着很多不同血量,不同技能,不同等级的怪,但是他们都有着一些共同特性,这时,如果每一个怪我们都要单独写一段代码的话,那么工作量就很复杂,但是有了继承,我们只需在他们公共属性上面,对每个不同的怪进行简单的特殊属性增加即可。

2.类的继承的格式:

Java中类继承类的关键字:extends
    格式:
    public class 类名(子类、派生类、超类)  extends 类名(父类、基类) {
        
    }


    注意:Java中类的继承是单继承(一个子类只能拥有一个父类,所以 extends 只能继承一个类。)。

3.子类能继承父类的哪些内容?

继承和访问修饰符是没有关系的;
子类继承父类后,子类能继承到父类所有的属性和所有的普通方法(不能继承构造方法)。

访问修饰符是用来限制属性和方法的使用范围:
    访问修饰符        同类中    同包不同类中    不同包中    不同包但是有继承关系的子类中
    private               可以        不可以                不可以        不可以
    默认的               可以        可以                    不可以        不可以
    protected           可以        可以                    不可以        可以
    public                 可以        可以                    可以            可以

关于子类和父类,在main中实现的时候,其实是有优先级的。优先子类内容进行运算、输出等。

而且子类中可以定义父类中没有定义过的属性和方法,这就是一开始举例中,对不同怪进行属性值的修改。

4.方法重写:

1)什么情况下需要使用方法重写?

子类和父类都有同一个方法,但是具体实现又不同时就需要使用方法重写来实现。

同样拿我们的怪来举例。有的怪用刀,有的怪用枪,有的怪用法杖,对不同怪,我们都需要对父类中的原式怪模型进行方法重写,实现不同怪的不同攻击方式。

2)方法重写的条件
        1.必须要存在继承关系;
        2.子类在重写方法时,子类方法的访问修饰符必须要大于或者等于父类方法的访问修饰符;(这里的大于等于比较级,按上面提到的,private<默认的(int,double等)<protected<public)。
        3.子类在重写方法时,子类方法的返回值数据类型,方法名,参数都必须要和父类的完全一致;

3)如何调用重写后的方法
        根据new关键字后的类名来决定,如果类名是有子类的,则优先调用子类的方法,如果子类没有才会调用父类的方法。
    

4)有些方法是不能重写的?
        private修饰符的方法不能重写,你定义的是新方法。
        final修饰的方法不能重写,重写就会出错。
        protected和默认的在特定情况下也不能重写,你定义的是新方法。
        
5)重写后,优先调用子类的方法,如果想要在调用子类的方法时也能执行父类的方法,要如何处理呢?
        使用super关键字,格式:super.方法名(参数值,...);
        super表示的是父类的对象。

 

二、奥特曼打小怪兽(继承)

题目:回合制对战游戏:奥特曼A和小怪兽A进行PK,直到一方的血量为0时结束战斗,输出谁胜利了!
        如果奥特曼A胜利,则奥特曼A和奥特曼B进行PK,直到一方的血量为0时结束战斗,输出谁胜利了!
        如果小怪兽A胜利,则小怪兽A和小怪兽B进行PK,直到一方的血量为0时结束战斗,输出谁胜利了!

这道题的核心在于写出攻击方式,明白是谁攻击谁。我们构造一个父类Man,由这个父类可以继承出奥特曼类和小怪兽类。由这两个子类,在main中出现奥特曼A、B和小怪兽A、B。下面我们写一个攻击函数attack()。既然是攻击,就要有被攻击的对象,所以我们要添加一个被攻击对象,q。

然后再完善攻击掉血。这里我们设定每受到一次攻击,血量减少1.

子类奥特曼既可以攻击小怪兽又可以攻击奥特曼:

同样的,小怪兽也既可以攻击奥特曼,又可以攻击小怪兽:

接下来,在主函数中实现功能即可。

 

附main完整代码:

public static void main(String[] args) {
        // TODO Auto-generated method stub
        Aoteman a1=new Aoteman();
        a1.name="奥特曼A";
        a1.blood=6;
        Aoteman a2=new Aoteman();
        a2.name="奥特曼B";
        a2.blood=4;
        Guaishou g1=new Guaishou();
        g1.name="小怪兽A";
        g1.blood=2;
        Guaishou g2=new Guaishou();
        g2.name="小怪兽B";
        g2.blood=1;
        do{
        a1.attackg(g1);
        g1.attacka(a1);
        }while(a1.blood!=0&&g1.blood!=0);
        if(a1.blood==0){
        System.out.println("小怪兽A胜利!");
        g1.blood=2;
        do{
            g1.attackg(g2);
            g2.attackg(g1);
        }while(g2.blood!=0&&g1.blood!=0);
        if(g1.blood==0){
            System.out.println("小怪兽B胜利!");
        }
        else{
            System.out.println("小怪兽A胜利!");
        }
    }
    else{
        System.out.println("奥特曼A胜利");
        a1.blood=6;
        do{
            a1.attacka(a2);
            a2.attacka(a1);
        }while(a2.blood!=0&&a1.blood!=0);
        if(a1.blood==0){
            System.out.println("奥特曼B胜利!");
        }
        else{
            System.out.println("奥特曼A胜利!");
        }
    }
        
        

    }

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值