黑马程序员技术交流社区

标题: OC的面像对象鱼java C++ ,有啥区别呢 [打印本页]

作者: 枫叶路过123    时间: 2014-11-7 00:31
标题: OC的面像对象鱼java C++ ,有啥区别呢
OC的面像对象鱼java C++ ,有啥区别呢,,,Java与OC那个复杂一些
作者: yuanlingqi    时间: 2014-11-7 09:13
OC与JAVA面向对象的思想是一致的,OC相对于JAVA语言设计的更简洁、更优雅。

举个例子,一个实体,对于每个JAVABEAN属性JAVA是必写getter,setter,这个很让人烦扰,java代码如下
  1. public class FzgsVo implements Serializable {

  2.     /** The Constant serialVersionUID. */
  3.     private static final long serialVersionUID = 3739942957289793958L;

  4.     /** The fzgs dm. */
  5.     private String fzgsDm;

  6.     /** The fzgs mc. */
  7.     private String fzgsMc;

  8.     /** The fzgs jc. */
  9.     private String fzgsJc;
  10.     // 分子公司签名
  11.     /** The fzgs qm. */
  12.     private String fzgsQm;

  13.     /**
  14.      * Gets the fzgs dm of FzgsVo.
  15.      *
  16.      * @return the fzgs dm
  17.      */
  18.     public String getFzgsDm() {
  19.         return fzgsDm;
  20.     }

  21.     /**
  22.      * Sets the fzgs dm of FzgsVo.
  23.      *
  24.      * @param fzgsDm
  25.      *            the new fzgs dm
  26.      */
  27.     public void setFzgsDm(String fzgsDm) {
  28.         this.fzgsDm = fzgsDm;
  29.     }

  30.     /**
  31.      * Gets the fzgs mc of FzgsVo.
  32.      *
  33.      * @return the fzgs mc
  34.      */
  35.     public String getFzgsMc() {
  36.         return fzgsMc;
  37.     }

  38.     /**
  39.      * Sets the fzgs mc of FzgsVo.
  40.      *
  41.      * @param fzgsMc
  42.      *            the new fzgs mc
  43.      */
  44.     public void setFzgsMc(String fzgsMc) {
  45.         this.fzgsMc = fzgsMc;
  46.     }

  47.     /**
  48.      * Gets the fzgs jc of FzgsVo.
  49.      *
  50.      * @return the fzgs jc
  51.      */
  52.     public String getFzgsJc() {
  53.         return fzgsJc;
  54.     }

  55.     /**
  56.      * Sets the fzgs jc of FzgsVo.
  57.      *
  58.      * @param fzgsJc
  59.      *            the new fzgs jc
  60.      */
  61.     public void setFzgsJc(String fzgsJc) {
  62.         this.fzgsJc = fzgsJc;
  63.     }

  64.     /**
  65.      * Gets the fzgs qm of FzgsVo.
  66.      *
  67.      * @return the fzgs qm
  68.      */
  69.     public String getFzgsQm() {
  70.         return fzgsQm;
  71.     }

  72.     /**
  73.      * Sets the fzgs qm of FzgsVo.
  74.      *
  75.      * @param fzgsQm
  76.      *            the new fzgs qm
  77.      */
  78.     public void setFzgsQm(String fzgsQm) {
  79.         this.fzgsQm = fzgsQm;
  80.     }
  81. }
复制代码
要是有1000个属性,你必须对应写1000个getter和setter,类会撑的很长,虽然getter和setter方法有快捷方法生成。在oc里,这只需要对应写1000个@property就搞定了,oc的编译器会帮你自动生成getter,setter,你根本不必关心。
相对于JAVA,OBJECT C还有其他更强大的语法功能,比如^block,我们可以将方法体实时嵌入代码中执行,
这个实际和lambda表达式比较想象,很多主流语言都支持了,但JAVA在JAVA8中才开始支持,而且设计的有点不伦不类,
很不好用,目前大家都在尽量避免使用它,因为还存在性能问题。而block在oc中是鼓励使用的。

从这两点就能看出oc相对java,设计上是领先的。
但oc也有个缺点就是和C代码混杂,这让初学者进入的时候会有门槛。


作者: doudou33420    时间: 2014-11-7 09:46
区别多了  强类型语言与弱类型语言   
JAVA 对抽象的定义  OC对抽象的定义 很明显就能看出来强弱
JAVA里只要你对抽象方法没有重写 那你这个类还是一个抽象类;
OC不一样, 不管你重写不重写 这个类你都随时调用, 哪怕你声明了 没有实现 他也只有运行时才报错
从这点更可以看出 接口的使用.  
不同的地方太多了.  
如果你拿C# 和JAVA比 那就比较相似了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2