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

    参考资料

  • 相关阅读:
    Linux 共享库
    使用Visual Studio(VS)开发Qt程序代码提示功能的实现(转)
    ZOJ 3469 Food Delivery(区间DP)
    POJ 2955 Brackets (区间DP)
    HDU 3555 Bomb(数位DP)
    HDU 2089 不要62(数位DP)
    UESTC 1307 windy数(数位DP)
    HDU 4352 XHXJ's LIS(数位DP)
    POJ 3252 Round Numbers(数位DP)
    HDU 2476 String painter (区间DP)
  • 原文地址:https://www.cnblogs.com/yayaer/p/5326923.html
Copyright © 2011-2022 走看看