精华内容
下载资源
问答
  • 什么抽象类

    千次阅读 2014-04-29 13:56:56
    总觉得 抽象类 可以被 非抽象类 所代替,那么为什么还要 抽象类呢? 问你个问题,你知道什么是“东西”吗?什么是“物体”吗?  “麻烦你,小王。帮我把那个东西拿过来好吗”  在生活中,你肯定过这个...

    总觉得 抽象类 可以被 非抽象类 所代替,那么为什么还要用 抽象类呢?

    问你个问题,你知道什么是“东西”吗?什么是“物体”吗? 
    “麻烦你,小王。帮我把那个东西拿过来好吗” 
    在生活中,你肯定用过这个词--东西。 
    小王:“你要让我帮你拿那个水杯吗?” 
    你要的是水杯类的对象。而东西是水杯的父类。通常东西类没有实例对象,但我们有时需要东西的引用指向它的子类实例。

    你看你的房间乱成什么样子了,以后不要把东西乱放了,知道么? 
    又是东西,它是一个数组。而数组中的元素都是其子类的实例。 
    --------- 
    上面讲的只是子类和父类。而没有说明抽象类的作用。抽象类是据有一个或多个抽象方法的类,必须声明为抽象类。抽象类的特点是,不能创建实例。 

    这些该死的抽象类,也不知道它有什么屁用。我非要把它改一改不可。把抽象类中的抽象方法都改为空实现。也就是给抽象方法加上一个方法体,不过这个方法体是空的。这回抽象类就没有抽象方法了。它就可以不在抽象了。 

    当你这么尝试之后,你发现,原来的代码没有任何变化。大家都还是和原来一样,工作的很好。你这回可能更加相信,抽象类根本就没有什么用。但总是不死心,它应该有点用吧,不然创造Java的这伙传说中的天才不成了傻子了吗? 

    接下来,我们来写一个小游戏。俄罗斯方块!我们来分析一下它需要什么类? 
    我知道它要在一个矩形的房子里完成。这个房子的上面出现一个方块,慢慢的下落,当它接触到地面或是其它方块的尸体时,它就停止下落了。然后房子的上面又会出现一个新的方块,与前一个方块一样,也会慢慢的下落。在它还没有死亡之前,我可以尽量的移动和翻转它。这样可以使它起到落地时起到一定的作用,如果好的话,还可以减下少几行呢。这看起来好象人生一样,它在为后来人努力着。 
    当然,我们不是真的要写一个游戏。所以我们简化它。我抽象出两个必须的类,一个是那个房间,或者就它地图也行。另一个是方块。我发现方块有很多种,数一下,共6种。它们都是四个小矩形构成的。但是它们还有很多不同,例如:它们的翻转方法不同。先把这个问题放到一边去,我们回到房子这个类中。 

    房子上面总是有方块落下来,房子应该有个属性是方块。当一个方块死掉后,再创建一个方块,让它出现在房子的上面。当玩家要翻转方法时,它翻转的到底是哪个方块呢?当然,房子中只有一个方块可以被翻转,就是当前方块。它是房子的一个属性。那这个属性到底是什么类型的呢?方块有很多不同啊,一共有6种之多,我需要写六个类。一个属性不可能有六种类型吧。当然一个属性只能有一种类型。 

    我们写一个方块类,用它来派生出6个子类。而房子类的当前方块属性的类型是方块类型。它可以指向任何子类。但是,当我调用当前方块的翻转方法时,它的子类都有吗?如果你把翻转方法写到方块类中,它的子类自然也就有了。可以这六种子类的翻转方法是不同的。我们知道'田'方块,它只有一种状态,无论你怎么翻转它。而长条的方块有两种状态。一种是‘-’,另一种是‘|’。这可怎么办呢?我们知道Java的多态性,你可以让子类来重写父类的方法。也就是说,在父类中定义这个方法,子类在重写这个方法。 

    那么在父类的这个翻转方法中,我写一些什么代码呢?让它有几种状态呢?因为我们不可能实例化一个方块类的实例,所以它的翻转方法中的代码并不重要。而子类必须去重写它。那么你可以在父类的翻转方法中不写任何代码,也就是空方法。 

    我们发现,方法类不可能有实例,它的方法的内容可以是任何的代码。而子类必须重写父类的翻转方法。这时,你可以把方块类写成抽象类,而它的抽象方法就是翻转方法。当然,你也可以把方块类写为非抽象的,也可以在方块类的翻转方法中写上几千行的代码。但这样好吗?难道你是微软派来的,非要说Java中的很多东西都是没有用的吗?

    当我看到方块类是抽象的,我会很关心它的抽象方法。我知道它的子类一定会重写它,而且,我会去找到抽象类的引用。它一定会有多态性的体现。 

    但是,如果你没有这样做,我会认为可能会在某个地方,你会实例化一个方块类的实例,但我找了所有的地方都没有找到。最后我会大骂你一句,你是来欺骗我的吗,你这个白痴。

    记住一点,面向对象不是来自于Java,面向对象就在你的生活中。而Java的面向对象是方便你解决复杂的问题。这不是说面向对象很简单,虽然面向对象很复杂,但Java知道,你很了解面向对象,因为它就在你身边。

    展开全文
  • Oracle:同义

    2018-05-15 22:15:00
    对一些比较长名字的对象(表、视图、索引、序列...)做简化,别名代替。2、作用: ①缩短对象名字的长度。 ②方便访问其他用户的对象。3、创建同义: 格式:create synonym 同义 for 表名/视图/其他对象;4...

    注意:创建同义词同样需要超级管理员授予权限。
    1、什么是同义词?对一些比较长名字的对象(表、视图、索引、序列...)做简化,用别名代替。
    2、作用:
          ①缩短对象名字的长度。
          ②方便访问其他用户的对象。
    3、创建同义词:
         格式:create synonym 同义词 for 表名/视图/其他对象;
    4、以超级管理员身份授予用户创建同义词的权利:
         格式:grant create synonym to 用户名;
    5、以超级管理员身份撤销用户创建同义词的权利:
         格式:revoke create synonym to 用户名;
    6、删除同义词:
         格式:drop synonym 同义词;
    展开全文
  • 对一些名字比较长的对象(表、视图、索引、序列...)做简化,别名代替;这个别名就叫 同义; 同义的作用: 1、缩短对象名字的长度; 2、方便访问其他用户的对象; 1、创建与 salgrade 表对应的 同义...

    什么是同义词(Synonym)?

    对一些名字比较长的对象(表、视图、索引、序列...)做简化,用别名代替;这个别名就叫 同义词;

     

    同义词的作用:

    1、缩短对象名字的长度;

    2、方便访问其他用户的对象;

     

    1、创建与 salgrade 表对应的 同义词,语法:create synonym 同义词 for 表名/视图/其它对象;

    默认情况下,scott 用户没有创建同义词的权限,可以通过 sysdba 给 scott 赋予该权限:

    然后再创建同义词就可以了:

    操作同义词就相当于操作对应的表(视图、索引、序列...):

    2、 删除同义词:

    删除同义词,不会影响基表中的数据;

    但是删除基表,会影响同义词的使用;

    3、给视图创建同义词:

    4、以 sysdba 身份将 scott 用户的 创建同义词(create synonym)权限撤销:

    展开全文
  • underscore 源码没有出现 undefined,而 void 0 代替之。为什么要这么做?我们可以从两部分解读,其一是 undefined 哪里不好了,你非得找个替代品?其二就是替代品为毛要找 void 0? 我们先看第一点,答案很简单,...

    underscore 源码没有出现 undefined,而用 void 0 代替之。为什么要这么做?我们可以从两部分解读,其一是 undefined 哪里不好了,你非得找个替代品?其二就是替代品为毛要找 void 0?

    我们先看第一点,答案很简单,undefined 并不是保留词(reserved word),它只是全局对象的一个属性,在低版本 IE 中能被重写。

    var undefined = 10;
    
    // undefined -- chrome
    // 10 -- IE 8
    alert(undefined);

    事实上,undefined 在 ES5 中已经是全局对象的一个只读(read-only)属性了,它不能被重写。但是在局部作用域中,还是可以被重写的。

    (function() {
      var undefined = 10;
    
      // 10 -- chrome
      alert(undefined);
    })();
    
    (function() {
      undefined = 10;
    
      // undefined -- chrome
      alert(undefined);
    })();

    接下来思考第二个问题,为毛找的替代品是 void 0?

    我们来看看 MDN 的解释:

    The void operator evaluates the given expression and then returns undefined.

    意思是说 void 运算符能对给定的表达式进行求值,然后返回 undefined。也就是说,void 后面你随便跟上一个表达式,返回的都是 undefined,都能完美代替 undefined!那么,这其中最短的是什么呢?毫无疑问就是 void 0 了。其实用 void 1,void (1+1),void (0) 或者 void "hello",void (new Date()) 等等,都是一样的效果。更重要的前提是,void 是不能被重写的(cannot be overidden)。

    那么,ES5 大环境下,void 0 就没有用武之地了吗?答案是否定的,用 void 0 代替 undefined 能节省不少字节的大小,事实上,不少 JavaScript 压缩工具在压缩过程中,正是将 undefined 用 void 0 代替掉了。

    转载于:https://www.cnblogs.com/ysk123/p/10002463.html

    展开全文
  • 引用引入了对象的一个同义。定义引用的表示方法与定义指针相似,只是&代替了*。引用(reference)是c++对c语言的重要扩充。引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。...
  • 泛型不支持 《T》代替了 方法一 public static 《T》 List《T》 query(String sql, Class《T》 clazz) { Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; Object ...
  • 我们在一些统计工作或者分析过程中,有事会遇到要统计一个序列中出现最多次的元素,比如一段英文中,查询出现最多的什么,及每个出现的次数。一遍的做法为,将每个此作为key,出现一次,value增加1。 例如: ...
  • 2) 客户无须知道他们使用的对象用什么类来实现的,他们只须知道定义接口的抽象类。 这将极大地减少子系统实现之间的相互依赖关系,也产生了可复用的面向对象设计的如下原则: 针对接口编程,而不是针对实现编程。
  • 引用引入了对象的一个同义。定义引用的表示方法与定义指针相似,只是&代替了*。引用实际上就是变量的别名。示意如下图所示: 由此我们可以看出,只有引用是不行的,且引用必须先定义再使用,如:...
  • C++小结--引用

    2018-04-09 20:38:46
    引用就是给已知的一个变量起了一个别名,引用引入了对象的一个同义。定义引用的表示方法与定义指针相似,只是&代替了*。引用(reference)是c++对c语言的重要扩充。引用就是某一变量(目标)的一个别名...
  • 2.27 为什么人们那么喜欢显式的掩码和位操作而不直接声明位域? 第3章 表达式 求值顺序 3.1 为什么这样的代码不行?a[i]=i++; 3.2 使用我的编译器,下面的代码inti=7;printf("%d\n",i++*i++);打印出49。不管按...
  • 《你必须知道的495个C语言问题》

    热门讨论 2010-03-20 16:41:18
    2.27 为什么人们那么喜欢显式的掩码和位操作而不直接声明位域? 32 第3章 表达式 33 求值顺序 33 3.1 为什么这样的代码不行?a[i]= i++; 33 3.2 使用我的编译器,下面的代码int i= 7; printf("%d\n", i+...
  • 2.27 为什么人们那么喜欢显式的掩码和位操作而不直接声明位域? 32 第3章 表达式 33 求值顺序 33 3.1 为什么这样的代码不行?a[i]= i++; 33 3.2 使用我的编译器,下面的代码int i= 7; printf(%d\n, i++ ...
  • 13.2.4 NOT EXISTS 代替NOT IN 219 13.3 自然连接和内部连接 220 13.4 UNION﹑INTERSECT和MINUS 221 13.4.1 IN 子查询 224 13.4.2 UNION、INTERSECT和MINUS的限制 224 第14章 一些复杂的技术 225 14.1 复杂...
  • 我们得专门的处理函数,在各个数据来源里筛选出我们真正需要的数据,不把那些无关紧要的、甚至是脏的数据污染了我们的全局数据对象。 这种对数据来源做萃取工作的函数,就叫 <code>action。它叫...
  • [Oracle.11g权威指南(第2版)].谷长勇.扫描版.pdf

    千次下载 热门讨论 2013-06-23 21:16:09
    本章讲述了Oracle数据库中最重要的几个模式对象的管理,包括表、索引、视图、同义、序列等。 13.1 模式与模式对象 307 13.2 管理表 307 13.2.1 建表时的考量 307 13.2.2 列数据类型 308 13.2.3 创建表的语法 309 ...
  • MySQL命令大全

    2018-01-15 11:19:17
    若要给此用户赋予他在相应对象上的权限的管理能力,可在GRANT后面添加WITH GRANT OPTION选项。而对于插入User表添加的用户,Password字段应用PASSWORD 函数进行更新加密,以防不轨之人窃看密码。对于那些已经不用...
  •  Access左连接语法(最近开发要左连接,Access帮助什么都没有,网上没有Access的SQL说明,只有自己测试, 现在记下以备后查)  语法 select table1.fd1,table1,fd2,table2.fd2 From table1 left join table2 on table1...
  • MYSQL常用命令大全

    2011-05-30 13:31:24
    若要给此用户赋予他在相应对象上的权限的管理能力,可在GRANT后面添加WITH GRANT OPTION选项。而对于插入User表添加的用户,Password字段应用PASSWORD 函数进行更新加密,以防不轨之人窃看密码。对于那些已经不用...
  •  9.1 向量代替数组  9.2 向量  9.3 迭代器  9.4 算法  9.5 成员类型  9.6 使用迭代器和算法  第10讲 自增和自减  10.1 自增  10.2 自减  第11讲 条件和逻辑  11.1 i/o和bool  11.2 布尔...
  • 关於通讯的指令.........................................................................................................21 十. 编译器( Compiler ).......................................................
  • C#编程经验技巧宝典

    热门讨论 2008-06-01 08:59:33
    19 <br>0038 巧“^=”运算符 19 <br>0039 巧位移运算符 20 <br>0040 使用条件运算符 20 <br>0041 巧分隔符 20 <br>0042 如何处理转义字符 21 <br>0043 “;”结束符问题 21 ...
  • 烹制耗能少的食品(如鸡蛋代替鸡) 集中烹调,剩饭不加热 点亮装饰气灯 使用电灯 尽量避免使用装饰灯 ──────────────────────────────────────────── ...
  • 对inception-v3的改进,深度可分离卷积代替普通卷积,降低参数量的同时提高了精度。 ImageNet-2012验证集 81.11%/95.45% dpn107 融合了densenet和resnext的特点。 ImageNet-2012验证集 80.89%/95.32% ...
  • 大学物理-卢德馨序言

    2010-03-19 20:25:56
    学在高速情形下,应该狭义相对论来代替;而对于强引力,它又偏离于广 义相对论,但在它的适用范围内仍然是精确的.科学的理论总是要发展的,需 要根据新发现的事实进行修正.在教科书中只介绍一种版本的做法很可能导...

空空如也

空空如也

1 2
收藏数 28
精华内容 11
关键字:

对象用什么词代替