亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

面向對象思想之 -- 限制對象屬性的訪問

2019-11-18 12:05:56
字體:
來源:轉載
供稿:網友

  雖然java只支持從一個父類繼續,但它使用接口的方式支持多重繼續.
  接口實現了多態,使得我們能夠給與對象不同特性以滿足不同的需要.
  你可以使用多態機制讓完成相似功能的不同的方法擁有相同的名字但是擁有不同的參數列表.
  動態/運行時的綁定機制答應一個對象在運行時被強制轉化成你所需要的對象類型,前提是這個對象實現了必需的接口或者括展了特定的父類.
  
  下面我們將討論通過限制對對象屬性和方法的訪問來強制實現對多重接口實現和父類拓展的正確使用的目的和實用性.
  
  黑箱方法:封裝
  一個基本的面向對象的概念就是封裝--將表示一個對象狀態的數據與其它對象隔離開來.這一點是通過一個通常叫做作用域的概念來實現的.作用域指的是編程語言的一種能力,這種能力被用來實現一些限制對類或者結構體成員變量的訪問的規則.大多數面向對象的語言支持作用域機制,這些機制通常是通過諸如public, PRotected, 和 private之類的非凡要害字來實現的.
  
  Java提供了四種不同的作用范圍:public, package, protected, 和 private.任何類,方法或者成員變量都能通過使用public, protected, 和 private要害字來顯式的加以保護.任何類,方法,或者成員變量假如沒有使用上面的要害字都將被隱式的給與package的作用范圍.所有這些就構成了Java中命名空間的概念.
  
  命名空間和軟件包
  一個命名空間可以被看成是在一個給定的上下文中一組相關的名字或是標識符.命名空間避免了擁有相同名字或標識符的實體存在于同一個上下文里.這里隱含的意思是只要實體是存在于不同的命名空間中,那么擁有相同名字或者標識符的實體就能夠呆在一塊兒.Java使用軟件包的概念來實現命名空間和作用范圍控制.
  
  軟件包是一個在統一的名字下的類和接口的集合.每一個類或者接口都必須存在于用package要害字構成的軟件包申明語句定義的命名空間中.例如,下面的申明語句:
  
  package com.mycompany.apps.HelloWorld;
  
  它申明了一個存在于com.mycompany.apps軟件包中的名叫HelloWorld的類或者接口.軟件包申明總是放在包含了類或者接口定義的文件的頂部.
  
  在java開發界,目前對軟件包的命名有一個建議,就是使用公司或組織的域名(以相反的順序),作為你的軟件包的第一部分.因為域名是全球唯一的,所以使用你的域名來命名你的軟件包也能使你軟件包的名字全球唯一.
  
  假如一個Java類或者接口沒有包含一個軟件包申明,那么它就屬于"unamed package,"也就是沒有名字的軟件包.無名的軟件包應該只用來測試程序或是代碼原型等等.
  
  請盡量使用封裝機制
  在任何程序風格中,尤其是在面向對象的編程中,將暴露的編程界面背后的實現細節隱藏起來是非常要害的.這使得低層的實現方法能夠在不影響編程界面現有的客戶端的前提下改變,而且能使對象完全自主的治理它們自己的狀態.
  
  分離界面和實現方法的第一步就是隱藏類的內部數據.要使一個成員變量或是方法對Java中所有潛在的客戶不可見,可以將用private要害字將它聲明為私有成員變量,如下所示:
  
  private int customerCount;
  
  要使一個成員變量或是方法除了其本身所屬類的子類以外對Java中所有潛在的客戶不可見可以使用protected要害字將它聲明成保護類型的,如下所示:
  
  protected int customerCount;
  
  要使一個成員變量或是方法除了其本身所屬的類以外對Java中所有潛在的客戶不可見不使用任何要害字來聲明它,如下所示:
  
  int customerCount;
  
  要將一個成員變量或是方法暴露給其所屬類的所有客戶,可以用public要害字將它聲明為公共的成員變量,如下所示:
  
  public int customerCount;
  
  訪問成員變量
  不論一個對象的數據隱藏得多么好,客戶仍然需要訪問一些隱藏的數據.這是通過調用函數或方法來實現的.在Java中,使用非凡的被稱做屬性訪問器的方法來訪問隱藏的數據是可能的.在Java中屬性訪問器和通常的函數之間并沒有本質的區別.將一個通常的方法轉變成一個屬性訪問器唯一要做的事情就是參照一個命名規則來添加方法.
  
  讀數據的訪問器的命名規則就是將方法命名為和數據域一樣的名字,將首字母大寫,然后在方法名字的前面添加get或是is."寫"數據訪問器的命名規則就是將方法命名為和數據域一樣的名字,將首字母大寫,然后在方法名字的前面添加set.下面的例子演示了寫和讀數據的數據訪問器方法.
  
  這是一個"讀"數據訪問器方法:
  
  public int getCustomerCount()
  {
    return(customerCount);
  }
  
  這是另一個"讀"數據訪問器方法
  
  public int isCustomerActive()
  {
    return(customerActive);
  }
  這是一個"寫"數據訪問器方法:
  
  public void setCustomerCount(int newValue)
  {
    customerCount = newValue;
  }
  使用訪問器方法答應其它對象訪問一個對象的隱藏數據而不直接涉及數據域.這就答應擁有隱含數據的對象在改變成員變量以前做正確性檢查并控制成員變量是否應該被設置成新的值.
  
  現在讓我們修改例子程序來使用這些概念,如下所示.
  
  public class HelloWorld
  {
    public static void main(String[] args)
    {
      Dog animal1 = new Dog();
      Cat animal2 = new Cat();
      DUCk animal3 = new Duck();
      animal1.setMood(Animal.COMFORTED);
      System.out.println("A comforted dog says " +animal1.getHello());
      animal1.setMood(Animal.SCARED);
      System.out.println("A scared dog says " +animal1.getHello());
      System.out.println("Is a dog carnivorous? " +animal1.isCarnivorous());
      System.out.println("Is a dog a mammal? " +animal1.isCarnivorous());
      animal2.setMood(Animal.COMFORTED);
      System.out.println("A comforted cat says " +animal2.getHello());
      animal2.setMood(Animal.SCARED);
      System.out.println("A scared cat says " +animal2.getHello());
      System.out.println("Is a cat carnivorous? " +animal2.isCarnivorous());
      System.out.println("Is a cat a mammal? " +animal2.isCarnivorous());
      animal3.setMood(Animal.COMFORTED);
      System.out.println("A comforted duck says " +animal3.getHello());
      animal3.setMood(Animal.SCARED);
      System.out.println("A scared duck says " +animal3.getHello());
      System.out.println("Is a duck carnivorous? " +animal3.isCarnivorous());
      System.out.println("Is a duck a mammal? " +animal3.isCarnivorous());
    }
  }
  
  abstract class Animal
  {
    // The two following fields are declared as public because they need to be
    // accessed by all clients
    public static final int SCARED = 1;
    public static final int COMFORTED = 2;
    // The following fields are declared as protected because they need to be
    // accessed only by descendant classes
    protected boolean mammal = false;
    protected boolean carnivorous = false;
    protected int mood = COMFORTED ;
    public boolean isMammal()
    {
      return(mammal);
    }
  
    public boolean isCarnivorous()
    {
      return(carnivorous);
    }
  
    abstract public String getHello();
  
    public void setMood(int newValue)
    {
      mood = newValue;
    }
  
    public int getMood()
    {
      return(mood);
    }
  }
  
  interface LandAnimal
  {
    public int getNumberOfLegs();
    public boolean getTailFlag();
  }
  
  interface WaterAnimal
  {
    public boolean getGillFlag();
    public boolean getLaysEggs();
  }
  
  class Dog extends Animal implements LandAnimal
  {
    // The following fields are declared private because they do not need to be
    // access by any other classes besides this one.
    private int numberOfLegs = 4;
    private boolean tailFlag = true;
    // Default constructor to make sure our properties are set correctly
    public Dog()
    {
      mammal = true;
      carnivorous = true;
    }
    // methods that override superclass's implementation
    public String getHello()
    {
      switch (mood) {
        case SCARED:
          return("Growl");
        case COMFORTED:
          return

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文字幕在线亚洲| 国产精品丝袜白浆摸在线| 久久91精品国产| 国产精品久久久久久久久男| 国产精品影片在线观看| 久久亚洲春色中文字幕| 中文字幕av一区二区三区谷原希美| 亚洲va码欧洲m码| 亚洲第一区在线| 亚洲精品欧美极品| 欧美大片大片在线播放| 国产大片精品免费永久看nba| 日韩精品欧美国产精品忘忧草| 在线视频中文亚洲| 国产精品中文久久久久久久| 亚洲免费电影在线观看| 狠狠久久五月精品中文字幕| 欧美怡红院视频一区二区三区| 国产在线观看精品一区二区三区| 亚洲风情亚aⅴ在线发布| 成人精品久久久| 精品无人区太爽高潮在线播放| 欧美激情亚洲激情| 久久综合色88| 国产精品v片在线观看不卡| 国内精品久久久久久久| 亚洲国产成人精品电影| 日本久久久久久| 亚洲自拍小视频免费观看| 久久久伊人欧美| 欧美一级电影久久| 欧美日韩国产丝袜美女| 日韩精品在线第一页| 性色av一区二区三区免费| 日韩美女视频在线观看| 国产精品一区二区3区| 最近2019年日本中文免费字幕| 菠萝蜜影院一区二区免费| 欧美床上激情在线观看| 成人激情视频在线播放| 久久躁日日躁aaaaxxxx| 欧美黄色片免费观看| 日韩免费av一区二区| 亚洲国产精品福利| 中文字幕欧美日韩精品| 精品一区二区三区四区在线| 欧美老少做受xxxx高潮| 色婷婷综合久久久久中文字幕1| 国产亚洲人成a一在线v站| 91免费人成网站在线观看18| 亚洲精品免费一区二区三区| 日韩国产欧美精品一区二区三区| 91高潮在线观看| 欧美午夜www高清视频| 在线观看欧美日韩| 懂色av一区二区三区| 国产成人精品在线播放| 伊人久久久久久久久久久| 国产不卡在线观看| 亚洲性线免费观看视频成熟| 国产精品wwww| 91久久精品视频| 北条麻妃一区二区三区中文字幕| 精品久久久91| 国模私拍视频一区| 亚洲福利视频二区| 国产精品久久久| 久久久成人的性感天堂| 久久精品视频在线观看| 国产精品一区二区三区毛片淫片| 91av网站在线播放| 久久影视电视剧免费网站清宫辞电视| 91在线看www| 91最新在线免费观看| 欧美黑人一区二区三区| 久久中文字幕一区| 欧美精品激情blacked18| 在线观看日韩专区| 97色在线视频| 欧美成人精品不卡视频在线观看| 国产精品视频成人| 精品久久久91| 国产97色在线| 久久久国产一区二区三区| 久久久久亚洲精品成人网小说| 久久久久久久一区二区| 亚洲欧美在线免费观看| 97视频人免费观看| 国产一区二区三区视频在线观看| 欧美成人精品一区二区| 欧美中文字幕视频在线观看| 亚洲黄色av网站| 91精品视频在线免费观看| 亚洲国产精彩中文乱码av| 日韩一区二区福利| 伊人伊成久久人综合网小说| 日韩高清电影免费观看完整版| 亚洲性生活视频在线观看| 伊人伊人伊人久久| 中文字幕日本精品| 亚洲午夜性刺激影院| 国产精品678| 国产精品久久二区| 97在线观看视频国产| 95av在线视频| 国外成人免费在线播放| 91精品国产91久久久久久吃药| 欧洲精品久久久| 日韩女优在线播放| 日韩美女免费视频| 色爱av美腿丝袜综合粉嫩av| 中文字幕免费精品一区| 久久69精品久久久久久国产越南| 国产精品爽爽ⅴa在线观看| 亚洲国产天堂久久综合网| 欧美日本国产在线| 国产视频亚洲精品| 97久久久久久| 亚洲欧洲一区二区三区在线观看| 91精品国产91久久久久久最新| 精品国产电影一区| 这里只有精品视频| 成人a在线观看| 欧美激情综合色综合啪啪五月| 欧美成人免费全部| 日本高清+成人网在线观看| 国产精品入口尤物| 国产精品偷伦一区二区| 国产精品激情av电影在线观看| 欧美成人在线影院| 亚洲韩国欧洲国产日产av| 深夜福利一区二区| 中文字幕无线精品亚洲乱码一区| 91久久精品日日躁夜夜躁国产| 久久久久久av| 欧美猛交ⅹxxx乱大交视频| 久久人人爽亚洲精品天堂| 亚洲女人被黑人巨大进入al| 久久男人av资源网站| 亚洲 日韩 国产第一| 成人精品久久av网站| 日本欧美精品在线| 日韩www在线| 97热精品视频官网| 欧美午夜无遮挡| 日韩国产高清视频在线| 亚洲日韩欧美视频| 欧美日韩中文在线观看| www.日韩av.com| 色99之美女主播在线视频| 久久久精品视频成人| 最近中文字幕2019免费| 伦伦影院午夜日韩欧美限制| 国产日韩欧美在线| 亚洲激情视频在线| 国产自摸综合网| 日韩亚洲在线观看| 性欧美xxxx| 精品久久久久久久久久国产| 黑人巨大精品欧美一区免费视频| 69久久夜色精品国产7777| 欧美日韩性视频| 亚洲四色影视在线观看| 色偷偷噜噜噜亚洲男人的天堂|