知识点总结之一

类与类之间的三种关系

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);
            }
        }
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,906评论 18 399
  • (一)Java部分 1、列举出JAVA中6个比较常用的包【天威诚信面试题】 【参考答案】 java.lang;ja...
    独云阅读 11,936评论 0 62
  • 1.import static是Java 5增加的功能,就是将Import类中的静态方法,可以作为本类的静态方法来...
    XLsn0w阅读 5,005评论 0 2
  • 面向对象主要针对面向过程。 面向过程的基本单元是函数。 什么是对象:EVERYTHING IS OBJECT(万物...
    sinpi阅读 4,755评论 0 4
  • 有一天突然想起了单反上的双重曝光功能,因为手里没带说明书,所以百度了一下如何操作,然后试着拍了几张。 在相机的菜单...
    花手鞠阅读 1,722评论 0 1