• 【Java】组合 继承 代理


    组合 继承 代理

    组合语法:

    只需要将对象引用置于新类中即可。例如,你需要某个对象,而且它还要有多个String对象,几个基本数据,以及另一个类的对象。

    类中域为基本类型时能够被自动初始化为0,但是对象引用会被初始化为null,编译器并不是简单地为每一个引用都创建默认对象,这一点非常有意义,如果那样的话会增加许多不必要的负担。

    想初始化这些引用,可以在代码中的下列位置进行:

    1. 定义对象的地方。这意味着它们能够在构造器被调用之前被初始化
    2. 在类的构造器中
    3. 就在正要使用这些对象之前,称为惰性初始化(Delayed Initialization)。在生成对象不值得及不必每次都生成对象的情况下,这种方式可以减少额外的负担。
    4. 使用实例初始化

    继承语法:

    继承是所有OOP语言和Java语言不可或缺的一部分。当创建一个类的时候总是在继承,因此,除非已明确指出从哪里继承,否则就是隐式的从Object继承

    组合的语法比较平实,但是继承使用的是一种特殊的语法:书写extends实现。这么做会自动得到基类中的所有域和方法。

    使用基类中定义的方法以及对他进行修改是可行的,调用基类方法用super关键字。继承过程中不一定非得使用基类的方法,也可以在导出类中添加新方法。

    代理:

    第三种关系称为代理,Java语言并没有提供对他的直接支持。这是继承与组合之间的中庸之道。因为我们将一个成员对象置于所要构造的类中(就像组合),但与此同时我们在新类中暴露了该成员对象的所有方法(就像继承)。我们使用代理时可以拥有更多的控制力,因为我们可以选择只提供在成员对象中的方法的某个子集。

    太空船控制模块:

    package reusing;
    
    public class SpaceShipControls {
        void up(int velocity) {}
        void down(int velocity) {}
        void left(int velocity) {}
        void right(int velocity) {}
        void forward(int velocity) {}
        void back(int velocity) {}
        void turboBoost(int velocity) {}
    }
    
    
    package reusing;
    
    public class SpaceShipDelegation {
        private String name;
        private SpaceShipControls controls = new SpaceShipControls();
        public SpaceShipDelegation(String name) {
            this.name = name;
        }
        //Delegated Methods
        public void up(int velocity) {
            controls.up(velocity);
        }
        public void down(int velocity) {
            controls.down(velocity);
        }
        public void left(int velocity) {
            controls.left(velocity);
        }
        public void right(int velocity) {
            controls.right(velocity);
        }
        public void forward(int velocity) {
            controls.forward(velocity);
        }
        public void back(int velocity) {
            controls.back(velocity);
        }
        public void turboBoost(int velocity) {
            controls.turboBoost(velocity);
        }
    
        @Override
        public String toString() {
            return name;
        }
    
        public static void main(String[] args) {
            SpaceShipDelegation shadow = new SpaceShipDelegation("Shadow");
            shadow.up(100);
            System.out.println(shadow);
        }
    
    
    }
    
    
  • 相关阅读:
    ASP.NET的运行原理与运行机制
    VS2008快捷键
    (五)SubSonic的存储过程操作
    110个Oracle常用函数整理汇总
    ASP.NET中HttpModule和HttpHandler的作用及用法
    报表统计(sql面试题)
    ASP.NET C# 数字格式化输出
    ASP.NET Global.ascx 事件大全
    ASP.NET中GUID
    asp.net 页面转向 Response.Redirect, Server.Transfer, Server.Execute的区别
  • 原文地址:https://www.cnblogs.com/Glov/p/13524405.html
Copyright © 2020-2023  润新知