zoukankan      html  css  js  c++  java
  • 20145101《Java程序设计》第4周学习总结

    20145101《Java程序设计》第4周学习总结

    教材学习内容总结

    第六章 继承与多态

    • 继承:避免多个类间重复定义共同行为。

    把相同代码提升为父类

    运用extends关键字的子类会继承扩充父类行为

    多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承单独的那个类即可。  

    多个类可以称为子类,单独这个类称为父类或者超类。  

    子类可以直接访问父类中的非私有的属性和行为。  

    public class Game1Role {
    private String name;
    private int level;
    private int blood;
    public int getBlood(){
    return blood;
    }
    public void setBlood(int blood) {
    this.blood = blood;
    }
    public int getLevel() {
    return level;
    }
    public void setLevel(int level) {
    this.level = level;
    }
    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }
    }
    

    通过extends 关键字让类与类之间产生继承关系。

    public class Game1SwordsMan extends Game1Role {
    public void fight(){
    System.out.println("挥剑攻击");
    }
    }
    
    • 多态:单一接口操作多种类型的对象。

    • is-a关系定义:子类只能继承一个父类,“是一种”关系。

       public class RPG {
       public static void main(String[] args) {
      
       SwordsMan swordsMan = new SwordsMan();
       swordsMan.setName("Justin");
       swordsMan.setLevel(1);
       swordsMan.setBlood(200);
      
      
       Magician magician = new Magician();
       magician.setName("Monica");
       magician.setLevel(1);
       magician.setBlood(100);
      
       showBlood(swordsMan);
       showBlood(swordsMan);
      
       }
      
       static void showBlood(Role role) {
       System.out.printf("%s 血量 %d%n", role.getName(), role.getBlood());
       }
       }
      

    在showBlood()方法中,通过Role类型既可以操作SwordsMan对象,也可以操作Magician对象,这就是多态。

    • 重新定义:在继承父类之后,定义与父类中相同的方法部署,但执行内容不同。

       public class RPG3
       {
       public static void main(String[] args)
       {
       SwordsMan swordsMan = new SwordsMan();
       swordsMan.setName("Justin");
       swordsMan.setLevel(1);
       swordsMan.setBlood(200);
       
       Magician magician = new Magician();
       magician.setName("Monica");
       magician.setLevel(1);
       magician.setBlood(100);
       
       drawFight(swordsMan);
       drawFight(magician);
       
       }
       static void drawFight(Role role)
       {
       System.out.print(role.getName());
       role.fight();
       }
       }
      
    • 抽象方法:如果某方法区块中真的没有任何程序代码操作,可以使用abstract表示该方法为抽象方法,不用撰写{ }区块,直接“;”结束即可。

      含有抽象方法的类,一定要在class前标示abstract;子类如果继承抽象类,意识继续标示abstract,另一种就是操作方法。

    • 继承语法的细节

      super关键字表示父类的意思。this变量代表对象本身。即super()和this()类似,区别是,super从子类中调用父类的构造方法,this()在同一类内调用其它方法。

      调用super()必须写在子类构造方法的第一行,否则编译不通过。每个子类构造方法的第一条语句,都是隐含地调用super()。

       public class OceanWorld1Anemonefish extends OceanWorld1Fish {
       public OceanWorld1Anemonefish(String name) {
       super(name);
       }
       @Override
       public void swim() {
       System.out.printf("小丑鱼 %s 游泳%n", name);
       }
       }
      

    第七章 接口与多态

    • 接口:可以理解为一种特殊的类,里面全部是由全局常量(static final)和公共的抽象方法所组成。

    • 接口的定义格式:接口的数据成员,只允许被public, static, final修饰。
      接口的方法成员,只允许被public, abstract修饰。

      接口中的数据成员都为static final类型,必须进行初始化,且接口的数据成员的值不能被修改,允许省略static, final关键字。接口中的方法必须是“抽象方法”,不能有方法体,允许省略public及abstract关键字

    • 接口的实现:
      接口不能用new运算符直接产生对象,必须利用其特性设计新的类,再用新类来创建对象
      与抽象类一样,接口要使用也必须通过子类,子类通过implements关键字实现接口。

    • 接口的继承:接口不能继承一个抽象类,却可以通过extends同时继承于多个接口。

       import static java.lang.System.out;
       public class EnumGame {
       public static void main(String[] args) {
       play(EnumAction.RIGHT);
       play(EnumAction.UP);
       }
       public static void play(EnumAction action) {
       switch (action) {
       case STOP:
       out.println("播放停止动画");
       break;
       case RIGHT:
       out.println("播放向右动画");
       break;
       case LEFT:
       out.println("播放向左动画");
       break;
       case UP:
       out.println("播放向上动画");
       break;
       case DOWN:
       out.println("播放向下动画");
       break;
       }
       }
       }
      

    教材学习中的问题和解决过程

    代码调试中的问题和解决过程

    本周代码托管截图

    其他(感悟、思考等,可选)

     java学习是一条长久的道路,有坎坷,也有解决问题的喜悦。这一周主要学习了六七章节的内容,首先主要是一个RPG、SwordsMan这两个程序,但其不仅仅是一个程序,是多个程序继承在一起才能运行,我们正一步一步在添砖加瓦,使程序日趋完善,功能越发强大。这周的学习让我体会到java语言功能的多样,操作接口、继承类,有时相同的问题可以有不同的方法解决,就需要多学习,选择效率高、准确度高的方法来解决问题。
    

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 200/200 2/2 20/20
    第二周 200/400 1/3 18/38
    第三周 200/600 1/4 22/60
    第四周 200/800 1/5 30/90

    参考资料

  • 相关阅读:
    hdu6162 Ch’s gift
    hdu 6166 Senior Pan
    bzoj2818 Gcd
    hdu6127 Hard challenge
    splay伸展树模板
    2016-2017 National Taiwan University World Final Team Selection Contest J
    2016-2017 National Taiwan University World Final Team Selection Contest C
    使用powershell管理域用户
    EGL Driver message (Critical) eglInitialize: No available renderers.
    Python实现telnet命令测试防火墙
  • 原文地址:https://www.cnblogs.com/verymoment/p/5327273.html
Copyright © 2011-2022 走看看