雖然Java只支持從一個父類繼承
接口實現了多態
你可以使用多態機制讓完成相似功能的不同的方法擁有相同的名字但是擁有不同的參數列表
動態/運行時的綁定機制允許一個對象在運行時被強制轉化成你所需要的對象類型
下面我們將討論通過限制對對象屬性和方法的訪問來強制實現對多重接口實現和父類拓展的正確使用的目的和實用性
黑箱方法:封裝
一個基本的面向對象的概念就是封裝
Java提供了四種不同的作用范圍:public
命名空間和軟件包
一個命名空間可以被看成是在一個給定的上下文中一組相關的名字或是標識符
軟件包是一個在統一的名字下的類和接口的集合
package com
它申明了一個存在於com
在java開發界
如果一個Java類或者接口沒有包含一個軟件包申明
請盡量使用封裝機制
在任何程序風格中
分離界面和實現方法的第一步就是隱藏類的內部數據
private int customerCount;
要使一個成員變量或是方法除了其本身所屬類的子類以外對Java中所有潛在的客戶不可見可以使用protected關鍵字將它聲明成保護類型的
protected int customerCount;
要使一個成員變量或是方法除了其本身所屬的類以外對Java中所有潛在的客戶不可見不使用任何關鍵字來聲明它
int customerCount;
要將一個成員變量或是方法暴露給其所屬類的所有客戶
public int customerCount;
訪問成員變量
不論一個對象的數據隱藏得多麼好
讀數據的訪問器的命名規則就是將方法命名為和數據域一樣的名字
這是一個
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 animal
Cat animal
Duck animal
animal
System
animal
System
System
System
animal
System
animal
System
System
System
animal
System
animal
System
System
System
}
}
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 =
public static final int COMFORTED =
// 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 =
private boolean tailFlag = true;
// Default constructor to make sure our properties are set correctly
public Dog()
{
mammal = true;
carnivorous = true;
}
// methods that override superclass
public String getHello()
{
switch (mood) {
case SCARED:
return(
case COMFORTED:
return
From:http://tw.wingwit.com/Article/program/Java/hx/201311/25793.html