北大青鳥:Java和ruby的方法調用作用域差別

      Java的方法調用作用域

      private方法在Java當中的含義是只在當前類范圍之內可以調用,當前類的子類也無法訪問,但能被同一類別的其他對象實例調用,例如:

      package com.robbinfan; public class C {     private String name;     private String getName() {         return name;     }     public C(String name) {         this.name = name;     }     public boolean compare(C c) {         return this.name == c.getName();     } }

      protected方法在Java當中的含義是在當前類所在的整個package當中都可見,其他package類則無法訪問。

      ruby的方法調用作用域

      private在當前類以及子類都可以調用,其他類無法訪問,比Java寬松一些,但private方法只能被當前對象隱式調用(self.),不能被同一類別的其他對象實例調用,這又比Java嚴格;protected稍微寬松一些,可以被同一個類別的其他實例調用,例如:

      class C   def initialize(name)     @name = name   end    def compare(c)     c.name == @name   end    protected   def name     @name   end end  class D < C end  d1 = D.new("fankai") d2 = D.new("hello")  puts d1.compare(d2)

      在類別C當中使用c.name,如果name方法是private的話,只能使用self調用,即只能當前對象實例在當前類范圍內調用;如果name方法是protected的話,那么可以使用同一類的對象實例顯式調用,即可以引用其他對象實例的name方法。

      因此privateprotected的在rubyJava的定義有很大的區別:

      1、在不同對象實例當中的作用域不同

      Java不管private還是protected的方法,都可以被同一個類別的其他對象實例調用;

      Rubyprivate方法不能被同一個類別的其他對象實例調用;

      2、在類繼承關系當中的作用域不同

      ruby不管private還是protected方法,都可以被子類繼承;

      Javaprivate方法不能被子類繼承;

      這種方法調用的差異,也許來自于不同的面向對象理念:Java的面向對象來自C++,強調類繼承關系,所以方法調用限定類繼承的層次結構當中的作用域,卻不強調對象實例作用域;而ruby的面向對象來自smalltalk,即使是類別也是對象,因此方法調用作用域都是針對對象實例調用來設置的。

      北大青鳥網上報名
      北大青鳥招生簡章
      主站蜘蛛池模板: 乱人伦一区二区三区| 一区二区三区无码视频免费福利 | 麻豆果冻传媒2021精品传媒一区下载| 日韩人妻一区二区三区蜜桃视频| 一区二区三区免费在线视频 | 国产在线精品一区二区高清不卡 | 久久久精品一区二区三区 | 亚洲AV无码一区二区三区人| 精品无码一区二区三区水蜜桃| 蜜芽亚洲av无码一区二区三区| 无码成人一区二区| 国产美女口爆吞精一区二区| 一区二区三区内射美女毛片| 日本一区二区三区在线观看视频 | 国产一区在线视频观看| 精产国品一区二区三产区| 亚洲国产成人精品无码一区二区 | 中文字幕在线视频一区| 国产伦一区二区三区高清| 国产高清一区二区三区四区| 国产成人精品一区二三区| 日本一区二区三区四区视频| 精品久久久久久中文字幕一区| 国产午夜精品一区二区三区极品| 97精品一区二区视频在线观看| 99在线精品一区二区三区| 亚洲AV成人一区二区三区观看| 国产主播福利一区二区| 久久精品国内一区二区三区| 亚洲午夜精品一区二区麻豆| 精品国产一区二区三区久久影院| 国内精自品线一区91| 内射白浆一区二区在线观看| 国产精品区AV一区二区| 亚洲人成人一区二区三区| 97一区二区三区四区久久| 国产福利日本一区二区三区| 一区 二区 三区 中文字幕| 国产一区二区三区免费观在线| 久久久久久人妻一区精品| 中文字幕无码不卡一区二区三区|