• 类再生


        Java的一个引人注意的特性就是代码的重复使用或者再生。

        Java有两种方法来实现:合成和继承。合成看起来比较简单,也就是声明一个新的类型,其中包括了几个现在以后的类型。用汽车的例子来说明就是避免“重复制造轮子”。至于“轮子”应该什么时候被造出来?可以是在准备生产汽车之前就造(在定义处)、可以边造汽车边造(构建器内)、可以早完汽车然后等到要用轮子的时候(在使用之前)。

        继承的实现很简单:“extends”。虽然简单,不过还是要想几个问题,这样一串的东西,先初始化哪个?其实写个简单的程序就可以验证了(基类的初始化完成之后才开始衍生类的初始化,其实简单想想也应该是这样的):

     1 class Art {
    2 Art() {
    3 System.out.println("Art constructor");
    4 }
    5 }
    6 class Drawing extends Art {
    7 Drawing() {
    8 System.out.println("Drawing constructor");
    9 }
    10 }
    11 public class test extends Drawing {
    12 test() {
    13 System.out.println("Cartoon constructor");
    14 }
    15 public static void main(String[] args) {
    16 test t = new test();
    17 }
    18 }

        当然在有需要的时候可以复合使用继承和合成。但是到底是应该选择继承还是合成?继承有一个特性就是“上溯造型”,如果用不到这个特性就用合成吧。还有一个判断的方法就是看是否使用已有类的接口?有一个关键字应该算是专门为继承准备的吧:“protected”。

        什么是“上溯造型”?就是说“新类型是现有类型的一种”。这样的说法在解释一些“为什么函数参数不同却能正确访问”的问题了。

        在继承里面最后引出来的一个东西是“final”。如果一个类被“final”修饰,那这个类就不能被继承(也仅此而已,不要想太多了)。当然“final”的用法远不止这些,例如如果一个“int”之类的值被“final”修饰,那么它的值是不能被改变的。如果一个“句柄”被就修饰,那么它就不能指向别的对象了(其实这个和“int”是一样的,只是怕混淆所以单独说一下,感觉和c++里面的const多么相似)。如果方法中的一个参数被“final”修饰,那么在这个方法内参数的值是不允许被修改的(即使是“int”)。如果用“final”来修饰一个方法(所有的“private”修饰的方法默认是“final”的),那么它的效果和c++里面的“inline”一样了,还有就是给这个方法“上了一把锁”,防止其他的继承类修改它。“final”用的时候还是要谨慎的!!

    -----------------------

    个人理解,欢迎拍砖。

  • 相关阅读:
    [bigdata] storm集群安装及测试
    [bigdata] kafka集群安装及测试
    [bigdata] spark集群安装及测试
    [bigdata] 使用Flume hdfs sink, hdfs文件未关闭的问题
    [bigdata] 启动CM出现 “JDBC Driver class not found: com.mysql.jdbc.Driver” 以及“Error creating bean with name 'serverLogFetcherImpl'”问题的解决方法
    [JavaEE]设计模式之SOLID原则
    [Android]Volley源码分析(五)
    [Android]Volley源码分析(四)
    [Android]Volley源码分析(三)
    python学习Day13--生成函数
  • 原文地址:https://www.cnblogs.com/ggzwtj/p/2116615.html
Copyright © 2020-2023  润新知