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

本博客详细解析了Java中面向对象编程的关键概念,包括类的继承、抽象方法、构造函数、访问权限等,并通过实例展示了如何使用接口定义行为。通过实践操作,实现了角色类的继承与接口的应用,最终通过代码运行验证了理论知识。

教材学习内容总结

第六章

1.在java中,子类只能继承一个父类。
2.在java中,继承时使用extends关键字,private成员也会被继承。
3.检查多态语法逻辑是否正确,方式是从=号右边往左读。
4.以抽象讲法解释多态,就是使用单一接口操作多种类型的对象。
5.如果某方法区块中没有任何程序代码操作,可以使用abstract标示该方法为抽象方法,该方法不用撰写{}区块,直接“;”结束即可。
6.定义不完整的类不能用来生成实例。
7.被声明为protected的成员,相同包中的类可以直接存取,不同包中的类可以在继承后的子类直接存取。
8.java中有public,protected与private三个权限关键字,但是实际上有四个权限范围。
9.想取得父类中的方法定义,可以在调用方法前加上super关键字;对于父类中的方法权限,只能扩大但不能缩小
10.如果想执行父类中某构造函数,可以使用super()指定。this()与super()只能选择一个调用,而且一定要在构造函数第一行执行。
11.如果class之前使用final关键字定义,表示类是最后一个,不会再有子类,不能被继承;定义方法时表示最后一次,子类不可以重新定义final方法
12.如果定义类没有使用extends关键字继承任何类,一定是继承java.lang.Object;在java中,任何类追溯至最上层父类,一定就是java.lang.Object。
-------------------------------------------------------------------------------------------------------------------------------------

第七章

1.对于“定义行为”,可以使用interface关键字定义,接口中的方法不能操作,直接标示为abstract,而且一定是public。
2.类要接口操作,必须使用implements关键字。
3.操作某接口时,对接口中定义的方法有两种处理方式,一是操作接口中定义的方法,二是再度将该方法标示为abstract.
4.类可以操作两个以上的类,也就是拥有两种以上的行为。类可以同时继承某个类,并操作某些接口。
5.enum可用于定义枚举常数,继承自java.lan.Enum。

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

刚开始还不是很理解本章内容,具体不知道怎么实践,代码运行老是出错。后来试着在NetBeans上新建几个类java文件定义子类继承父类之后问题便得到了解决。
P159的Role父类代码

package rpg;

public class Role {
    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;
    }
}

然后分别定义了Magician和SwordsMan继承Role类。

package rpg;

public class Magician extends Role {    
    public void fight() {
        System.out.println("魔法攻击");
    }
    
    public void cure() {
        System.out.println("魔法治疗");
    }
}
package rpg;

public class SwordsMan extends Role {
    public void fight() {
        System.out.println("挥剑攻击");
    }
}

最终将RPG运行得到结果。

package rpg;

public class RPG {
    public static void main(String[] args) {
        demoSwordsMan();
        demoMagician();
    }

    static void demoSwordsMan() {
        SwordsMan swordsMan = new SwordsMan();
        swordsMan.setName("Justin");
        swordsMan.setLevel(1);
        swordsMan.setBlood(200);
        System.out.printf("劍士:(%s, %d, %d)%n", swordsMan.getName(), 
                swordsMan.getLevel(), swordsMan.getBlood());
    }

    static void demoMagician() {
        Magician magician = new Magician();
        magician.setName("Monica");
        magician.setLevel(1);
        magician.setBlood(100);
        System.out.printf("魔法師:(%s, %d, %d)%n", magician.getName(), 
                magician.getLevel(), magician.getBlood());
    }
}

888945-20160326214136104-1297591125.png

P201代码学会用接口定义行为,并且成功运行了。

package ocean;


public class Anemonefish extends Fish {
   public Anemonefish(String name) {
       super(name);
   }
   
    @Override
    public void swim() {
        System.out.printf("小丑鱼 %s 游泳%n", name);
    }
}
package ocean;
public abstract class Fish implements Swimmer {
    protected String name;
    public Fish(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }
    @Override
    public abstract void swim();
}
package ocean;

public class Human implements Swimmer {
    private String name;
    public Human(String name) {
        this.name = name;
    } 
    public String getName() {
        return name;
    }
    
    @Override
    public void swim() {
        System.out.printf("人类 %s 游泳%n", name);
    }
}
package ocean;

public class Piranha extends Fish {
   public Piranha(String name) {
       super(name);
   }
   
    @Override
    public void swim() {
        System.out.printf("食人鱼 %s 游泳%n", name);
    }    
}
package ocean;
public class Shark extends Fish {
   public Shark(String name) {
       super(name);
   }
   
    @Override
    public void swim() {
        System.out.printf("鲨鱼 %s 游泳%n", name);
    }
}
package ocean;

public class Submarine implements Swimmer {
    private String name;
    
    public Submarine(String name) {
        this.name = name;
    }
    
    public String getName() {
        return name;
    }
    
    @Override
    public void swim() {
        System.out.printf("潜水艇 %s 潜行%n", name);
    }
}
package ocean;

public interface Swimmer {
    public abstract void swim();
}
package ocean;
public class Ocean {
    public static void main(String[] args) {
        doSwim(new Anemonefish("尼莫"));
        doSwim(new Shark("兰尼"));
        doSwim(new Human("贾斯丁"));
        doSwim(new Submarine("黄色一号"));
    }

    static void doSwim(Swimmer swimmer) {
        swimmer.swim();
    }
}

结果为
888945-20160326220951526-2026906640.png

本周代码托管截图

888945-20160327171617636-424205800.png

888945-20160327171633308-586582368.png

其他(感悟、思考)

本周的学习任务很多,课本上的知识也很难一下子全部消化吸收,还是要看平时积少成多,实践为主。

学习进度条

代码行数(新增/累积)博客量(新增/累积)学习时间(新增/累积)重要成长
第一周100/1002/210/10
第二周150/2501/310/20
第三周100/3501/410/30
第四周320/6701/530/60

转载于:https://www.cnblogs.com/20145122chengzhiyin/p/5324301.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值