zoukankan      html  css  js  c++  java
  • 组合和继承

    组合

    通俗的说法为一个类持有另一个类的对象,即通常所说的has-a关系,代码表现的简单形式为:

    class A{
    
    }
    
    class B{
        private A a;
    
    
    }

    组合的情况非常常见,它使得两个类建立了一种不是那么强烈的关系,如果修改A类里的细节,并不会影响到B;

    继承

    继承,类似父与子的关系,即非常熟悉的is-a关系,代码表现的简单形式为:

    class Father{
    
        private int a;
    
        Father() {
        }
        Father(int a) {
        }
    }
    
    class Son extends Father{
    
        Son() {
        }
        Son(int a) {
            super(a);
        }
    
    }

    继承使用extends关键字,子类基础基类(父类);

    基类和子类中调用顺序问题:

    在子类调用自己的构造器时,会先调用基类的构造器,如果此时,父类中含有静态代码块,非静态代码块,子类中也含有静态代码块,非静态代码块,此时的调用顺序如何,代码如下:

    class Father{
    
        static {
            int static_data = 0;
            System.out.println("调用父类中的静态代码块");
    
        }
        {
            int data = 0;
            System.out.println("调用父类中的非静态代码块");
        }
        //private int a;
        Father() {
         //   System.out.println(static_data);
            System.out.println("调用父类的构造函数");
    
        }
    
    }
    
    class Son extends Father{
        static {
            int static_data = 0;
            System.out.println("调用子类中的静态代码块");
    
        }
    
        {
            int data = 0;
            System.out.println("调用子类中的非静态代码块");
        }
        Son() {
            System.out.println("调用子类的构造函数");
        }
    }
    
    public class test2 {
        public static void main(String[] args) {
            Son son = new Son();
        }
    }

    输出如下:

    关于什么时候选择组合,何时选择继承,由于项目经验较少,理解也不是非常到位:

    想在新类中使用现有类的功能而非它的接口这种情形,使用组合。在新类中嵌入某个对象,让其实现所需要的功能,但新类的用户看到的只是为新类所定义的接口,而非所嵌入对象的接口。

    继承情形,使用某个现有类,并开发一个它的特殊版本,意味着使用一个通用类,并为了某种特殊需要而将其特殊化。

    应优先考虑组合情况,后考虑继承。

  • 相关阅读:
    神经网络-FPN 19
    机器学习
    神经网络-DenseNet 18
    神经网路骨架:各自的特点统计
    转载:一步一步制作根文件系统
    设计模式博客
    【转】PowerPC平台linux设备移植
    【收藏】自己动手写编译器、连接器
    查看pthread线程库中锁的持有者方法
    【转】深入 Linux 的进程优先级
  • 原文地址:https://www.cnblogs.com/xuhan74520/p/13802593.html
Copyright © 2011-2022 走看看