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

    20145204 《Java程序设计》第四周学习总结

    教材学习内容总结

    继承

    什么时候使用继承?

    当多个类中出现重复定义的行为(即多个类中出现重复的代码)时,就把相同的程序代码提成为父类。

    使用继承的意义
    1. 提高了代码的复用性。
    2. 使类和类之间产生关系,从而产生多态 。
    注意
    1. 当类与类之间有所属关系时才使用继承。不能因为要使用别的类中的功能而随意使用继承。
    2. 子类只能继承一个父亲。
    多态与is-a

    在继承中子类和父类的“是一种”关系。

    子类是一种父类:

    SwordsMan swordsman=new SwordsMan;
    
    
    
    Role role=new SwordsMan();
    
    

    在java中有且仅有一种继承父类

    重新定义行为

    如果子类和父类的定义函数名相同会出现函数覆盖的情况。

    多个类中功能相同但是功能主体不同,也可以抽取在父类中。

    抽象方法、抽象类

    上述在父类中的fight()函数没有撰写程序代码,用abstract关键词标识,public abstract class roleplay表示定义不完整的类,就不能建立实例。

    子类必须覆盖父类中的所有抽象方法,才能建立子类调用。

    protected成员

    protected与public、private类似都是权限关键字。如果成员被定义为protected的话在相同的包中可以直接存取。

    super关键字

    修改子类中已经存在的内容时,可以在调用方法前加上super关键字。
    在使用super关键字调用父类方法,不能定义为private(只限定在类内中使用)

    接口

    为什么会用到接口

    我们在第六章中学习了继承,一个类继承另一个类就可以拥有该类中的一些方法,但是类的继承有一个“是一种”的属性,你继承哪个就是一种该类,可是有时候我们仅仅想要拥有类中方法但是与该类并没有从属关系,此时就用到接口。

    接口使用

    在java中会用到interface关键字定义接口。标准定义:

    public interface  role{
     public abstract void roleplay ();
                 
    }
    

    我们注意到该方法只定义了一个接口,但是并没有具体操作方法。如果想要拥有role中的行为必须操作接口。

    我们用关键字implements操作接口。

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

    关于子类继承抽象类有些不太清楚,课本上说继续标识子类是一种抽象类或者说操作抽象方法。关于如何操作抽象方法小小的做了一个尝试:

    abstract class  role{
        abstract void speak();
    
    }
    class student extends role {
        void speak(){
            System.out.println("i am just a student");
        }
        
    }
    
    public class abvoid {
    
        public static void main(String[] args) {
            student stu1=new student();
            stu1.speak();
    // TODO code application logic here
        }
        
    }
    

    结果

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

    简单继承
    class role {
    private String name;
    private int level;
    private int blood;
    public int getBlood(){
        return blood;
    }
    public void setBlood(int blood){
        this.blood=blood;
    }
    }//建立父类
    class Magician extends role{
        public void fight(){
            System.out.println("魔法攻击");
        }
    }//子类继承
    public class roleplay{
        public static void main(String[] args){
          Magician mag =new Magician();
          mag.setBlood(100);
          mag.setLevel(1);
          mag.setName("justin");
          System.out.printf("%d %d %s %n",mag.getBlood(),mag.getLevel(),mag.getName());
          mag.fight();
        }//从输出可以看出实例mag已继承父类role。
    }
    
    运行结果:

    子父类方法覆盖:
    
    public class role{
        public static void main(String[] args){
          Magician mag =new Magician();
          SwordsMan swords=new SwordsMan();
          mag.setBlood(100);
          mag.setLevel(1);
          mag.setName("justin");
           swords.setBlood(500);
          swords.setLevel(2);
         swords.setName("bob");
         drawFight(swords);
         drawFight(mag);
        }
        static void drawFight(roleplay Role){
            System.out.print(Role.getName());
            Role.fight();
            
        }
    }
    
    
    结果显示:

    本周代码托管截图

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

    这两周的学习内容中有很多的概念,书上的例子也有很多需要我们去实践,虽然说课本上的代码也敲了,知识内容都理解了,但是感觉学的还是不踏实,对于java面向对象这一块还是不能很好的应用。只能说学的多而不精,看上去每个概念都学了,但是应用方面有很大的欠缺。希望以后自己慢慢地实践过程中再学习体会吧。

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 3500行 30篇 400小时
    第一周 100/100 2/2 20/20
    第二周 200/300 1/3 30/50
    第三周 300/600 1/4 28/78
    第四周 300/900 2/6 20/98

    参考资料

  • 相关阅读:
    公司真题-字节跳动
    全素组探求
    枚举
    求n个整数的最大公约数
    Ajax技术
    读文本文件
    JSTL标签库
    URL跟URi的区别
    常用的JSTL标签
    EL表达语言
  • 原文地址:https://www.cnblogs.com/yayaer/p/5326923.html
Copyright © 2011-2022 走看看