zoukankan      html  css  js  c++  java
  • 20155201 2016-2017-2 《Java程序设计》第四周学习总结

    20155201 2016-2017-2 《Java程序设计》第四周学习总结

    教材学习内容总结

    - 第六章要点:

    • 继承:面向对象中,子类继承父类,避免重复的行为定义。继承基本上就是避免多个类重复定义共同行为。P158-159为剑士和魔法士定义类时出现共同的重复部分
    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;
        }
    

    以上部分是重复部分,使用继承语句可以避免重复敲代码:

    public class Swordsman extends Role{
        ...;
    }
    

    这句语句的意思是SwordsMan继承Role类。

    • 抽象方法:如果某方法区块中真的没有任何程序代码操作,可以使用abstract标示该方法为抽象方法,该方法不用撰写{}区块,直接;结束即可。
    public abstract class Role{
        public abstract void fight();
    }
    
    • 将父类的类成员定义为public时,会完全开放成员的访问权限;如果只想让子类直接存取类成员,可以定义类成员为protected:
    public class name{
        protected String name1;
        protected int name2;
    }
    

    被声明为protected类型的成员,相同包中的类可以直接存取,不同包中的类可以在继承后的子类直接存取。类中有成员被声明为protected后,IDEA中图标发生了变化。

    权限关键字与范围:

    关键字 类内部 相同包类 不同包类
    public 可存取 可存取 可存取
    protected 可存取 可存取 子类可存取
    可存取 可存取 不可存取
    private 可存取 不可存取 不可存取
    • 如果想取得父类中的方法定义,可以在调用方法前,加上super关键字:
    public String roString(){
        return super.toString();
    }
    
    • 在Java中,子类只能继承一个父类,如果定义类时没有使用extends关键字指定继承任何类,那一定是继承java.lang.Object,相当于
    puclic class name extends Object{
        
    }
    

    在Java中,任何类追溯至最上层父类,一定就是java.lang.Object,任何类型的对象,都“是一种”Object。

    - 第七章要点

    • 接口:书中例子:“所有东西”都会“游泳”,代表所有东西都可以拥有“游泳”,而不是某种东西专属,类似继承。定义方法如下:
    public interface name{
        public abstract void name2();
    }
    
    

    类中操作接口,使用implements关键字。操作某接口时,对接口中定义的方法有两种处理方式,一是操作接口中定义的方法:

    public class name3 extends name1 impelments name1{
        ...
    }
    

    二是再度将该方法标示为abstract:

    public abstract class name3 implements name4{
        ...
    }
    
    • 在Java中,可使用interface来定义抽象的行为与外观,如接口中的方法可声明为public abstract :
    public interface Swimmer{
        public abstract void swim();
    }
    

    接口中的方法有操作时,一定得是公开且抽象,为了方便,你也可以省略public abstract:

    public interface swimmer{
        void main();
    }
    
    • 在interface中可以定义常数,java中经常见到在接口中定义这类常数,称为枚举常数。

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

    • 6.4课后练习中第1、2题我认为应该是选B显示some Service,答案是C。
    • 解决:

    翻阅之前教材6.2.3再看构造函数内容,得到如下解释:如果子类构造函数中没有指定执行父类中哪个构造函数,默认会先调用父类中无参数构造函数。按照书上解释应该选父类中输出some service,但@Override书上的定义是“检查是否重新定义父类方法”,而我在网上查到的含义是重写函数,相当于与父类函数无关,这样答案选C就有理由了。还是望老师再解释下

    • 教材P202页Airplane.java应该命名为Seaplane.java

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

    • 在编写P186页ConsoleGame代码时,继承extends GuessGame时出现错误,应该是abstract定义权限问题。

    最开始新建项目时我并没有选择在package下新建Java文件,所以我只好把GuessGame的abstract定义修改,如下:

    public class GuessGame {
        public void go(){
            int number=(int) (Math.random()*10);
            int guess;
            do{
                print("输入数字:");
                guess=nextInt();
            }while (guess!=number);
            println("猜中了!");
        }
        public void println(String text){
            print(text+"
    ");
        }
        public void print(String text){
    
        }
        public int nextInt(){
            return nextInt();
        }
    }
    

    之后ConsoleGame成功运行,截图如下:

    • P203页代码Ocean.java中飞鱼应该不仅游泳,还会飞,修改代码如下:
    public class Ocean2 {
        public static void main(String[] args) {
            doSwim(new Seaplane("空军零号"));
            doFly(new FlyingFish("甚平"));
        }
        static void doSwim(Swimmer swimmer){
            swimmer.swim();
        }
        static void doFly(FlyingFish flyer){
            flyer.fly();
            flyer.swim();
        }
    }
    

    代码托管

    • 代码提交过程截图:

      • 运行 git log --pretty=format:"%h - %an, %cd : %s" 并截图
    • 代码量截图:

      • 运行 find src -name "*.java" | xargs cat | grep -v ^$ | wc -l 并截图

    上周考试错题总结

    • 填空:Linux Bash中,(grep )命令可以进行全文搜索。
    • 判断: Java中,=与==并没有在基本类型和类类型的不同。(OK)
    • 判断:Java中类总会有默认构造方法。(X)
    • 填空:Java中类的成员变量必须进行初始化,否则会出语法错误。(X)
    • 填空:Java中成员方法中引用成员变量,要使用(this)关键字。
    • 填空:Java中方法参数只用(传值)调用。

    感悟与思考

    这周的学习任务是两章,代码也很多,不过有很多项目下重复的class文件,复制了一点偷懒,文件名都一样,也不会算进代码行。按照老师的要求细化了commit注释。Java学习已经到了第七章,我还是没法做到自己解决全部问题,希望再经过一段时间的学习,能做到没有疑问,或者是能自己解决疑惑。

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    第四周 700/1408 1/1 18/18
    • 计划学习时间:15小时

    • 实际学习时间:18小时

    参考资料

  • 相关阅读:
    HTML5 浏览器设定
    c语言运算符优先级
    Jquery选择器
    asp.net中的<% %>用法
    Jquery技巧
    css选择器
    HTML5 Canvas 参考手册
    具有滑动效果的导航代码
    委托
    kubernetes 1.6 集群实践 (十)
  • 原文地址:https://www.cnblogs.com/zhuohua/p/6581678.html
Copyright © 2011-2022 走看看