关于继承

继承是JAVA对象面向对象的三大特性之一,即子类可以继承父类的属性和方法,从而使子类对象具有父类的特征和行为。

继承的原理:以动物为例子,动物可分为食肉动物,食草动物,杂食动物,我们可以去思考它们是否具有相同的特征,比如都有腿,眼睛,能够去进食等相同属性和方法,我们完全可以用一个父类去进行归纳总结,而不必去为每个动物单独设置共同的属性和方法,大大减少了工作量,极大的提高了效率。

继承的关键字为extends,通过它确定了子类与父类的关系

具体用法:public class 子类 extends 父类{},当然继承的前提是父类存在。

子类继承父类也是有要求的,与权限有关,权限符号:public(公共的),protected(受保护的),private(私有的),缺省的。

public:在整个项目下可以使用。

protected:同一个包下以及子类类中。

private:在本类中使用,只能自己使用。

缺省的:通常是不写的,同一个包内可以使用

子类继承父类的好处在于,减少了代码的代码量,不需要反复去写。另外在工作的时候,如果需要添加功能或者是修改,主要修改父类就可以了。不好的地方也是有的,假如父类错了,那么整个项目自然而然就出错了,牵一发而动全身。

  • 注意:
  • 子类不能选择性继承父类;
  • 子类只能继承一个父类,但是可以声明多个接口
  • 构造方法不会被子类去继承,但可以在子类中去调用父类的构造方法。

重写是子类非常重要的方法,重写父类的方法具有与父类方法相同的名称,参数数量,方法类型和方法,大概只有参数值可以不同了,哈哈。(如果在重写父类的方法之后,还要调用父类的方法,使用super.就可以了。

来简单举一个例子,相信大家都玩过游戏,游戏人物都会有自己的一些属性和行为,类似于生命值,攻击等等。

首先建立一个父类

public class hero {
    String nameId;
    int ad;
    int lv;
    int hp;



}

父类可以看作为一个公共类,现在去建立几个子类

import game0331.hero;

public class HouYi extends hero {
    public void ack_q(hero h){

        int num = (int) (400 + ad * 0.8 + lv * 20);
        h.hp -= num;
        System.out.println(nameId + "攻击了" + h.nameId + "使其失去了" +
                num + "点生命值,其还剩下" + h.hp
        );
    }
}

import game0331.hero;

public class LuBan extends hero {
    public void ack_q(hero h){

        int num = (int) (400 + ad * 0.8 + lv * 20);
        h.hp -= num;
        System.out.println(nameId+ "攻击了" + h.nameId+ "使其失去了" +
                num + "点生命值,其还剩下" + h.hp);

    }
}
import game0331.hero;

public class ZhangFei extends hero {
    public void ack_q(hero h){
        int num = (int) (400 + ad * 0.8 + lv * 20);
        h.hp -= num;
        System.out.println(nameId+ "攻击了" + h.nameId+ "使其失去了" +
                num + "点生命值,其还剩下" + h.hp);
    }
}

别忘了还需要设置一个主类,用以运行。

import game0331.HouYi;
import game0331.LuBan;

public class PK {
    public static void main(String args[]){
        HouYi HY=new HouYi();
        ZhangFei ZF=new ZhangFei();
        HY.nameId="后羿";
        HY.hp=4000;
        HY.ad=10;
        HY.lv=10;

        ZF.nameId="张飞";
        ZF.ad=10;
        ZF.hp=3400;
        ZF.lv=10;
        HY.ack_q(ZF);
        ZF.ack_q(HY);
        LuBan LB=new LuBan();
        LB.nameId="鲁班";
        LB.ad=40;
        LB.hp=5000;
        LB.lv=10;
        LB.ack_q(HY);
        LB.ack_q(ZF);

    }
}

运行效果图如下

基本就是这样了。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值