zoukankan      html  css  js  c++  java
  • 第四周学习总结

    20145113第四周学习总结

    教材学习内容总结

    1.多态:使用单一接口操作多种类型的对象。通过书上的例子,实际动手通过了Role类型操作了Swordman与Magician对象。

    2.抽象方法、抽象类:使用abstract定义

     public abstract class Role
     public abstract void fight();
    

    定义成抽象类的Role就不能再实例化了,并且如果子类继承了抽象类,对于父类的抽象方法:一是继续标识方法为抽象方法,二是操作抽象方法。如果两个都没实施则会报错。

    这就避免了子类重写父类的方法时手误。

    3.可以通过super关键字来获取父类中的方法,但该方法不能是private。

    "Swordman"+super.toString();
    

    4.构造函数:执行new Other()是先执行Other中的流程。而Other中调用父类的无参构造方法。

    Other other=new Other();
    

    子类相当于:

    public class Other extends Some {
    Other()
    {
        super();
        System.out.println("调用了子类的构造方法!\n");
    }
    
    }
    

    若子类:

    public class Other extends Some {
    Other()
    {
        super(10);
        System.out.println("调用了子类的构造方法!\n");
    }
    
    }
    

    在子类的构造函数中调用了父类的有参构造函数,如果再使用

    Other other=new Other();
    

    则不会再调用父类的无参的构造方法。

    5.java.lang.Object:java中所有的对象都是一种Object,所以如果想要用数组来搜集各种对象 可以:

    static Object[]objs={"hello",67,6+7==4,4.5};
    

    6.接口:继承“是一种”关系,操作接口则表示“拥有行为”。类要操作接口使用implements关键字,同时使用多个接口则接口间用逗号隔开。

    public class Swimplayer extends Human implements Swim,Fly
    

    接口使用易错点:

    public interface Swim {
       void swimm();//默认是public abstract
    }
    

    如果现在有个类使用这个接口

    public class Shark implements Swim{
     void swimm(){
        System.out.println("shark can swim\n");}
    }
    

    则会出现变异错误因为swimm在接口中默认是public abstract,但在使用的时候没有申明public则默认是protected,范围缩小了,出现编译错误。

    在接口中定义枚举常熟可以写成

    int STOP=0
    

    默认省略了public static final。

    7.内部类:

    class Some{
    clss Other{}
    }
    

    很少用,但是如果要取用Other时
    要先建立Some实例

    Some s=new Some();
    Some.Other=s.new Other();
    

    如果如果是操作某个接口,Some接口定义了do()方法,要建立匿名类实例:

    Some some=new Some(){
    public void do(){
        System.out.println("...");
    }
    

    简化写法:

    Some some=()->{
    out.println("...");
    }
    

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

    1.

    Role man2=new Magician();
    man2.good();
    

    如果用man2来调用 Magician中Role中没有的方法,则会报错,但是如果通

    Role boy=new Magician();
    Magician swordman=(Magician)boy;
    swordman.cure();
    ((Magician) boy).cure();
    

    虽然boy是Role申明的但是加上了(Magician)则可以调用Magician中Role中没有的方法。

    2.对匿名内部类的理解上还存在一些问题。 ##代码调试过程中的问题和解决过程

    class Some{
    
    private final int x;
    public Some(){
        
    }
    public Some(int x)
    {
        this.x=x;
    }
    
    public int getX() {
        return x;
    }
    }
    public class Test7 {
    public static void main(String[] args) {
            Some so=new Some(8);
        System.out.println(so.getX());
    }
    }
    

     private final int x;
    

    在给x定义为final时候虽然在有参的构造方法里面给x赋值了,但是 ![](http://images2015.cnblogs.com/blog/886876/201603/886876-20160325165007839-219874910.png)

    解决方法:在询问助教后知道了其中的原因:因为在编译的时候并不知道调用的是有参还是无参的构造函数,如果调用的是无参的构造函数就会导致x没有赋初始值。
    可以将无参构造方法去掉或者在无参构造函数里对x进行赋值。

    public Some(){
        this.x=0;
    }
    

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

    虽然对着书上敲代码显得枯燥无味,但是在这本厚厚的书又确实可以找到一些边边角角的语法盲点。之前如果遇到编译错误,尝试了,编译通过了就没有继续去寻找原因了,但这次我静下心,多问自己几个为什么,为什么那样定义编译不通过,这样就可以了呢。在寻找答案的过程中,再翻回到课本,收获了更多。 ![](http://images2015.cnblogs.com/blog/886876/201603/886876-20160326205925151-277948597.png)

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000 25 100
    第一周 100/200 1/2 3/5
    第二周 300/400 2/3 4/9 使用everything与PowerCmd
    第三周 200/600 3/3 8/17 安装了idea,并将代码上传到gitosc上
    第四周 1200/1800 4/4 6/15 会使用wc查看代码长度
    ![](http://images2015.cnblogs.com/blog/886876/201603/886876-20160326210027308-1680112428.png)

  • 相关阅读:
    Tsql 获取服务器信息
    数据字典生成脚本 【转载】
    c# winform文本框数字,数值校验
    ReentrantLock和AbstractQueuedSynchronizer的分析
    多线程
    前缀和与差分数组
    链表
    堆(优先队列)
    排序算法
    二分查找(递归和非递归)
  • 原文地址:https://www.cnblogs.com/crystallin/p/5320031.html
Copyright © 2011-2022 走看看