幾個基本的概念
對象
對象代表現實世界中可以明確標識的一個實體,包括狀態:state和行爲:behavior兩方面。使用一個通用類來定義同一類型的對象。
類
類是一個模版、藍本或者說是合約,用來定義對象的數據域是什麼以及方法是做什麼的。一個對象是類的一個實例。創建實例的過程叫做:實例化。
對象和類的區別
術語“對象”和“實例”經常可以互換,類和對象之間的關係類似於蘋果派配方和蘋果派之間的關係。可以用一種配方做出任意多的蘋果派來。
UML類圖
類的模版和對象的圖解可以用統一建模語言(Unified Modeling Language,UML)的圖形化符號進行標準化。這種符號話的語言描述類,叫做UML類圖。
在類圖中,數據域表示爲:
dataFieldName:dataFieldType 數據域名:數據域類型
構造方法可以表示爲:ClassName(parameterName:parameterType)類名(參數名:參數類型)
方法可以表示爲:
methodName(parameterName:parameterType):returnType方法名(參數名:參數類型):返回類型
瞭解以上概念之後,來看下面的幾個示例。
示例一:類的定義與實例化。
運行效果如圖:
實現的源代碼如下:
package Blog;
import java.util.Scanner;
import javax.swing.*;
public class blogTryProject{
//圓類的定義與創建對象(實例化)
public static void main(String[] args) { Circle1 circle1 =
new Circle1(); System.out.println("The area of the circle of radiun " +
circle1.radius + " is " + circle1.getArea());
Circle1 circle2 = new Circle1(10);
System.out.println("The area of the circle of radiun " + circle2.radius +
" is " + circle2.getArea());
Circle1 circle3 = new Circle1(100);
System.out.println("The area of the circle of radiun " + circle3.radius +
" is " + circle3.getArea());
circle2.radius = 100; System.out.println("The area of the circle of radiun "
+ circle2.radius + " is " + circle2.getArea());
}
}
class Circle1 {
double radius;
Circle1() {
radius = 1.0;
}
Circle1(double newRadius) {
radius = newRadius;
}
double getArea() {
return radius * radius * Math.PI;
}
}
示例二:對象數組的使用。
運行效果如圖:
實現源代碼如下:
package oop;
import javax.swing.*;
public class oopAndObject {
//對象數組的使用示例
public static void main(String[]args){
Circle3[] circleArrary;
circleArrary = createCircleArrary();
printCircleArrary(circleArrary);
}
public static Circle3[] createCircleArrary(){
Circle3[] circleArrary = new Circle3[5];
for(int i = 0;i < circleArrary.length;i++){
circleArrary[i] = new Circle3(Math.random()*100);
}
return circleArrary;
}
public static void printCircleArrary(Circle3[] circleArrary){
System.out.printf("%-30s%-15s\n","Radius","Area");
for(int i = 0;i < circleArrary.length;i++){
System.out.printf("%-30s%-15s\n",circleArrary[i].getRadius(),
circleArrary[i].getArea());
}
System.out.println("----------------------------------------------------");
System.out.printf("%-30s%-15s\n","The total area of circles is ",sum(circleArrary));
}
public static double sum(Circle3[] circleArrary){
double sum = 0;
for(int i = 0;i < circleArrary.length;i++)
sum += circleArrary[i].getArea();
return sum;
}
}
class Circle3 {
private double radius;
private static int numberOfObjects = 0;
Circle3() {
radius = 1.0;
numberOfObjects++;
}
Circle3(double newRadius) {
radius = newRadius;
numberOfObjects++;
}
public double getRadius() {
return radius;
}
public void setRadius(double newRadius) {
radius = (newRadius >= 0) ? newRadius : 0;
}
public static int getNumberOfObjects() {
return numberOfObjects;
}
public double getArea() {
return radius * radius * Math.PI;
}
}
示例三:模擬銀行創建賬戶以及賬戶相關操作的類。
運行效果如圖:
實現源代碼如下:
package Blog;
import java.util.Date;
import java.util.Scanner;
import javax.swing.*;
public class blogTryProject{
public static void main(String[]args){
Acount ac = new Acount(1122,20000);
System.out.println("創建賬戶後賬戶 "+ac.getId()+" 餘額爲:"+ac.getBalance());
ac.setAnnualInterestRate(0.045);
ac.withDraw(2500);
System.out.println("取款2500後賬戶 "+ac.getId()+" 餘額爲: "+ac.getBalance());
ac.deposit(3000);
System.out.println("存款3000後賬戶 "+ac.getId()+" 餘額爲: "+ac.getBalance());
System.out.println("月利息爲: "+ac.getMonthlyInterestRate());
System.out.println("賬戶 "+ac.getId()+" 開戶日期爲: "+ac.getDateCreated());
}
}
class Acount{
private int id;
private double balance;
private double annualInterestRate;
private Date dateCreated;
Acount(){
id = 0;
balance = 0;
dateCreated = new Date();
}
Acount(int newID,double newBalance){
id = newID;
balance = newBalance;
dateCreated = new Date();
}
public int getId(){
return id;
}
public void setId(int newID){
id = newID;
}
public double getBalance(){
return balance;
}
public void setBalance(double newBalance){
balance = newBalance;
}
public double getAnnualInterestRate(){
return annualInterestRate;
}
public void setAnnualInterestRate(double newRate){
annualInterestRate = newRate;
}
public String getDateCreated(){
return dateCreated.toString();
}
public double getMonthlyInterestRate(){
return annualInterestRate / 12.0;
}
public void withDraw(double outBalance){
balance -= outBalance;
}
public void deposit(double inBalance){
balance += inBalance;
}
}
總結:學習了對象和類之後,就要會做到以下三個方面:1)設計類並畫出UML類圖;
2)實現UML中的類;
3)使用類開發應用程序。
使用面向對象的思想開發程序有諸多好處,可以用類來實現其三大特性,抽象、集成、封裝。這些對開發大型程序有其他方法不可替代的好處。