小哲教你Java---继承(类与类之间的关系)

  • 以人为示例:

    • 人类: 姓名 年龄 两只眼睛 直立行走 思考

      • 学生类:学号 分数 上课 学习 考试
      • 大学生类: 专业 学分 学习的科目 考 CET
      • 中学生类: 中学数学 中学语文
      • 小学生类: 小学数学 小学语文
  • 注意:

    • 上一级类作为下一级类的父类
    • 下级类作为上级类的子类 ( 扩展类 )
    • 任何一个类只能有一个直接父类 ,可以有多个直系父类 ( 父类的父类也是我的父类 )
    • 父类比较抽象 ,子类更加具体
    • 什么时候可以选择继承一个类? 子类继承父类后 继续扩展改造新的功能
    • Java 中 任何类都默认有一个父类,叫做 Object
    • 禁止一个类可以被继承,可以使用 final 修饰这个类 (final 修饰的类不能有子类 )
    • 格式: public class 子类名 extends 父类名 { }
  • 作用:

    • 1 : 子类可以直接继承父类的属性和方法
      多个子类共用的属性和方法都可以定义在父类中,子类只需要继承就可以了
    • 2 : 一个对象可以拥有多重类型 ,除了自己本类,还有所有的父类类型
    • 3 : 方法重写: 某一个方法,所有的子类都有,但是每个子类的方法内容不一样
      子类中重写父类的方法,要求格式一样,但是内容可变
    • 但是会优先调用重写之后的方法
    • 动物类: 吃
    • 狮子老虎: 吃
    • 牛羊:吃

      代码样例:

      
      // 好汉 类
      public class Hero {
      String name;
      String id;
      int hp;
      int ad;
      int df;
      int speed;
      public void showInfo() {
      System.out.println("name='" + name + '\'' +
      ", id='" + id + '\'' +
      ", hp=" + hp +
      ", ad=" + ad +
      ", df=" + df +
      ", speed=" + speed);
      }
      public void showTime() {
      System.out.println("---" + name + "精彩时刻-----");
      }
      }
      
      public class SongJiang extends Hero {
      public void showTime() {
      super.showTime();// super 指代父类 调用父类的方法
      System.out.println(name + "此人是108好汉的大哥");
      }
      public void run1000KM() {
      System.out.println(name + "独有技能");
      }
      public void atk(Hero lzs) {
      int num = (int) (10 + ad * 1.5 + speed * 0.8);
      num -= lzs.df;
      if (num > 0) {
      lzs.hp -= num;
      System.out.println(name + "给了" + lzs.name + "一脚,使其HP减少了" + num +
      "点。其还剩下" + lzs.hp);
      } else {
      System.out.println(name + "给了" + lzs.name + "一脚,并未造成伤害~");
      }
      }
      }
      
      public class Game {
      public static void main(String[] args) {
      SongJiang songJiang = new SongJiang();
      songJiang.ad = 20;
      songJiang.name = "宋江";
      songJiang.id = "及时雨";
      songJiang.df = 50;
      songJiang.hp = 150;
      songJiang.speed = 100;
      songJiang.showInfo();
      LuZhiSheng lzs = new LuZhiSheng();
      lzs.ad = 200;
      lzs.name = "鲁智深";
      lzs.id = "花和尚";
      lzs.df = 999;
      lzs.hp = 999;
      lzs.speed = 10;
      lzs.showInfo();
      songJiang.showTime();
      lzs.showTime();
      // 在不同类型下 要确定可以使用的属性以及方法
      Hero hero= songJiang;// 转为好汉宋江
      hero.showTime();
      hero.showInfo();
      songJiang.run1000KM();
      songJiang.atk(lzs);
      lzs.atk(songJiang);
      Wu ws = new Wu();
      ws.ad = 280;
      ws.name = "武松";
      ws.id = "打虎英雄";
      ws.df = 100;
      ws.hp = 300;
      ws.speed = 50;
      ws.showInfo();
      songJiang.atk(ws);
      }
      }
      public class LuZhiSheng extends Hero {
      public void showTime() {
      super.showTime();
      System.out.println(name + "此人曾经倒拔垂杨柳");
      System.out.println("此人曾经拳打镇关西");
      }
      public void atk(SongJiang sj) {
      int num = (int) (10 + ad * 1.5);
      num -= sj.df;
      if (num > 0) {
      sj.hp -= num;
      System.out.println(name + "给了" + sj.name + "一拳,使其HP减少了" + num +
      "点。其还剩下" + sj.hp);
      } else {
      System.out.println(name + "给了" + sj.name + "一拳,并未造成伤害~");
      }
      }
      }
      package
      oop.zyf0725oop
      ;
      public class Wu extends Hero{
      }

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值