我的JAVA笔记

来源:互联网 发布:java 增量覆盖率 编辑:程序博客网 时间:2024/05/17 07:34

前言:本文用于记录日常java学习以及使用时所遇到的问题以及解决方法。


1. final与static关键字使用总结

  • final:最终的、无法改变的。(为了程序设计以及效率)
    1. final类不能被继承,没有子类,final类中的方法默认是final的。
    2. final方法不能被子类的方法覆盖,但可以被继承,不能被修改。
    3. final成员变量表示常量,只能被赋值一次,赋值后值不再改变。(fanal空白:定义时可以先声明而不初始化;使用时一定要初始化)
    4. final不能用于修饰构造方法。 final参数:当函数参数为final类型时,你可以读取使用该参数,但是无法改变该参数的值。
  • static:全局、静态。
    1. static变量:静态变量。在内存中独一无二,只有一个拷贝。而与之相对是实例变量,只要创建一个实例,就会为实例变量分配一次内存。多个实力变量之间互不影响。
    2. static方法:静态方法可以通过类名访问,static方法必须实现,不能是abstract抽象的。

大致的概念如上:具体可以参考资料,可结合程序理解:Java关键字final、static使用总结


2. Java继承和接口的区别

  • 继承:主要是为了不必重新开发,并且在不必了解实现细节的情况下拥有了父类我所需要的特征。

    但是很多时候,一个子类并不需要父类的所有特征,它可能只是需要其中的某些特征,但是由于通过继承,父类所有的特征都有了,需要的和不需要的特征同时具备了。而那些子类实际上不需要用到的,有时候甚至是极力避免使用的特征也可以随便使用,这就是继承的副作用。特别是允许多重继承的OO语言中,很容易引起不容易发现的错误。所以在OO的语言中,会创造出各种规定来限制子类使用父类中的某些方法。

    举例说,如果狗的主人只是希望狗能爬比较低的树,但是不希望它尾巴可以倒挂在树上,像猴子那样可以飞檐走壁,以免主人管不住它。那么狗的主人肯定不会要一只猴子继承的狗。

  • 设计模式更多的强调面向接口。猴子有两个接口,一个是爬树,一个是尾巴倒挂。我现在只需要我的狗爬树,但是不要它尾巴倒挂,那么我只要我的狗实现爬树的接口就行了。同时不会带来像继承猴子来带来的尾巴倒挂的副作用。这就是接口的好处。

    OO技术发展也有好多年了,一个很明显的趋势就是继承的使用越来越少,而接口的使用越来越广泛了。其实只要稍微比较一下JDK里面那些最早就有的类库和最近才加进去的类库,就可以很明显的感觉到OO技术领域的编程风格的变迁,由大量的继承到几乎无处不用的面向接口编程。

    接口不是替代继承。比如说我现在就是要我的动物去爬树,我根本就不需要知道到底是狗去爬树还是猴子去爬树。我派一个“能爬树”的动物去爬。这个能爬树的动物既可以是猴子,也可以是狗。这样不是很灵活吗?

    狗(爬树,咬人)
    猴子(爬树,尾巴倒挂)

    如果我只要满足爬树的要求,我根本就不管它是不是狗。 如果我既要爬树也要咬人,那么我当然可以选狗,也可以创建一个接口(爬树咬人),然后让狗实现(爬树咬人)接口。
    因为我要的是实现我的软件的功能,只要实现了我需求的功能,我管它是不是狗呢?也许狗可以,也许狗不可以,也许狗今天可以,以后又不可以了。我都不管。我只要(爬树咬人)接口。
    也许我原来一直用狗来完成我的爬树咬人接口,但是后来我发现另一种动物,比如猫吧,在爬树咬人这个功能上比狗更灵活,于是我就用猫替换了狗,而且代码一点都不需要修改。
    转自:接口和继承的区别


3.未完待续。。。

0 0
原创粉丝点击