知识点总结之一

作者: Mr_SuX | 来源:发表于2016-12-24 14:21 被阅读45次
    类与类之间的三种关系

    1.is-a关系 -- 继承 --学生和人
    2.has-a关系 -- 关联(聚合/合成) -- 扑克和一张牌
    3.user-a关系 -- 依赖 -- 人和房子

    类和它实现的接口直接的关系

    1.play-a/like-a -- 扮演/看起来像

    缺省适配模式
    • 在使用接口时,必须实现接口中所有的方法,如果需要使用某个方法,则需要创建一个类(适配器)实现该接口,从而可以直接实现适配器,选择性重写需要的方法。
    对于实现接口Java8新增

    1.java8以后,接口可以进行默认实现,从而在实现接口后,可以选择行重写需要的方法。

    public default name(){
      此处省略10000行代码
    }
    

    2.如果一个接口中只有一个方法且没有默认实现,那么就可以使用如下方法(Lambda表达式/匿名函数:e ->{})。如给按钮添加监听器

    okButton.addActionListener(e -> {
      此处省略10000行代码
    });
    
    final/native

    1.由final修饰的方法,子类不能在重写;
    2.final修饰的类,不能被继承(即没有子类);
    3.final修饰的变量,即为常量。
    4.native修饰的方法,代表其是由C或C++实现的

    对象的克隆

    -- 如果一个对象在使用中如要多次创建,那么则可以使用对象克隆来增加效率

    实现Cloneable接口,子类重写父类(Object)的clone方法
    // 重写父类克隆的方法
        @Override
        public Object clone() {
            Student temp = null;
            try {
                // 调用Object父类的clone(克隆)方法
                temp = (Student) super.clone();
            } catch (CloneNotSupportedException e) {
                e.printStackTrace();
            }
            return temp;
        }
    
    数组排序(Arrays.sort())
    • 排序的前提:
      1.两个对象可以比较大小
      2.需要实现Comparable接口,重写compareTo方法。
    // 重写Comparable接口的compareTo方法
        @Override
        public int compareTo(Student o) {
            /*
             * 比较this和other谁大谁小(返回负数、0、正数)
             * 后面减前面为升序(this.age-o.age) 
             * 前面减后面为降序(o.age-this.age)
             */
            return this.age - o.age;// 升序
            // return o.age - this.age;// 降序
            // return o.name.compareTo(this.name); // 升序
            // return this.name.compareTo(o.name);// 降序
        }
    
    模版方法设计模式
    • 抽象类作为多个子类的通用模版,子类在抽象类的基础上进行扩展、改造,但子类总体上会保留抽象类的行为方式
    • 解决问题
      1.当功能内部一部分实现是确定的,一部分实现是不确定的,这时候就可以把不确定的内容暴露出来,让子类去实现。
      2.编写一个抽象父类,父类提供了多个子类的通用方法,并把一个或多个方法留给其他子类实现,就是一种模版模式。
    abstract class Template {
        // 未确定部分
        public abstract void code();
        // 已确定部分
        public void speedTimes() {
            long start = System.currentTimeMillis();
            code();
            long end = System.currentTimeMillis();
            System.out.println("运行时间:" + (end - start));
        }
    }
    class SubTemplate extends Template {
        @Override
        public void code() {
            for (int i = 2; i <= 100000; i++) {
                boolean flag = true;
                for (int j = 2; flag && j <= Math.sqrt(100000); j++) {
                    if (i % j == 0) {
                        flag = false;
                    }
                }
                if (flag) {
                    System.out.println(i);
                }
            }
        }
    }
    

    相关文章

      网友评论

        本文标题:知识点总结之一

        本文链接:https://www.haomeiwen.com/subject/xhwlvttx.html