zoukankan      html  css  js  c++  java
  • Java 接口与继承 道至简第六章发表阅读笔记

    一、继承条件下的构造方法调用

     1 class Grandparent {
     2 
     3     public Grandparent() {
     4         System.out.println("GrandParent Created.");
     5     }
     6 
     7     public Grandparent(String string) {
     8         System.out.println("GrandParent Created.String:" + string);
     9     }
    10 }
    11 
    12 class Parent extends Grandparent {
    13 
    14     public Parent() {
    15         //super("Hello.Grandparent.");
    16         System.out.println("Parent Created");
    17        // super("Hello.Grandparent.");
    18     }
    19 }
    20 
    21 class Child extends Parent {
    22 
    23     public Child() {
    24         System.out.println("Child Created");
    25     }
    26 }
    27 
    28 public class TestInherits {
    29 
    30     @SuppressWarnings("unused")
    31     public static void main(String args[]) {
    32         Child c = new Child();
    33     }
    34 }

      

      通过 super 调用基类构造方法,必须是子类构造方法中的第一个语句。

    二、方法覆盖

     1 public class Fruit
     2 {
     3         
     4     public String toString()
     5     {
     6         return "Fruit toString.";
     7     }
     8 
     9     public static void main(String args[])
    10     {
    11         Fruit f=new Fruit();
    12         System.out.println("f="+f);
    13     //    System.out.println("f="+f.toString());
    14     }
    15 }

      

      

      Fruit类覆盖了Object类的toString方法。在“+”运算中,当任何一个对象与一个String对象,连接时,会隐式地调用其toString()方法,默认情况下,此方法返回“类名 @ +   hashCode”。为了返回有意义的信息,子类可以重写toString()方法。方法覆盖要求子类与父类的方法一模一样,否则就是方法重载(overload)!

      Java“方法覆盖”的语法规则:

      (1)覆盖方法的允许访问范围不能小于原方法。

      (2)覆盖方法所抛出的异常不能比原方法更多。

      (3)声明为final方法不允许覆盖。 例如,Object的getClass()方法不能覆盖。

      (4)不能覆盖静态方法。

    三、道至简第六章发表阅读笔记

      第六章引用了《列子》的一句话“得其精而忘其粗,在其内而忘其外;见其所见,不见其所不见,视其所视,而遗其所不视。”这句话的意思是:得到它的精髓却忘记了它的粗,在它内部却忘记了它的外部;只能看到能见到的东西,而不能看到那些看不到的东西。要知道程序语言对于一个编程人员而言仅仅是一个工具、一个媒介。作为IT项目开发的人员,看清楚大的程序只是项目的开始而已。

          按照人类的发展史来看,猿人与人类的关键差别在于,是否学会制作和使用工具。而编程人员也常常被称为程序猿,我觉得也有可能是因为我们队工具的盲目。

          我们目前所学过C++,JAVA与其说是技术课程,还不如说是语言。这几门语言,就是用于和计算机对话的。而我感觉我们是用学英语的方法来学习程序语言的。我们太专注遇语言工具的的学习了。对于其他专业知识反而造成了忽视。作者在第一章中曾经说过:成天讨论这门语言好,或者那门语言坏的人,甚至是可悲的。语言仅仅是一个工具,一个我们用来实现工程的工具。

          在本章的第二节中,作者提出了程序的本源定义“程序=算法+结构”,这也是原始的状态。任何与编程相关的工作,都是以此为本源中心。就像英语单词都是由26个字母组成的。所以所有的程序代码都是由“程序=算法+结构”得来的。即使面对复杂的程序,我们也应该抽丝剥茧地理清思路,这样就很容易看懂程序了。

          随着事情的发展,根据前人的实践和总结,过程、对象和方法都出现了。方法和方法论是用于推动程序向前发展的。要知道的是方法不是实物,不能被看到,只有拥有足够的编程经验才能理解。并且理解过程需要编程经验,理解对象也需要编程经验,也就是说我们需要的是熟能生巧。过程是伴随着工程而出现的,过程就是角色、沟通和环节,解决的是角色间的关系问题。

         最狭义的工程,是“做什么”和“做到什么”。也就是说,把我们要实现的目标通过语言、方法、工具实现出来的就是工程。工程需要方法和过程来达成。对于大的工程而言,团队极为重要。一个人是很难高效率地完成大工程的。在现今社会中,如果没有团队意识,那么就会一触而溃。

         在团队中,组织是很重要的。这个组织无关于技术,而重点放在人力资源、项目资金和项目组的协同等方面。工程理论其实就囊括了组织学。当工程关注的只是需求、配置和文档等要素,那么这样的过程是肤浅的技术层面。所以我们应该关注的还是实现工程的细节,而非目标。这些应该是项目经理和技术经理所共同关注的一部分。

         实现是开发项目的本质性需求。为了去实现项目,我们需要不断积累和时间来总结和归纳方法。由于“实现”的需要,我们有了团队组织、有了模型、有了语言工具。

  • 相关阅读:
    leetcode 1301. 最大得分的路径数目
    LeetCode 1306 跳跃游戏 III Jump Game III
    LeetCode 1302. 层数最深叶子节点的和 Deepest Leaves Sum
    LeetCode 1300. 转变数组后最接近目标值的数组和 Sum of Mutated Array Closest to Target
    LeetCode 1299. 将每个元素替换为右侧最大元素 Replace Elements with Greatest Element on Right Side
    acwing 239. 奇偶游戏 并查集
    acwing 238. 银河英雄传说 并查集
    acwing 237程序自动分析 并查集
    算法问题实战策略 MATCHORDER 贪心
    Linux 安装Redis全过程日志
  • 原文地址:https://www.cnblogs.com/yifengyifeng/p/6047628.html
Copyright © 2011-2022 走看看