JAVA物件導向案例-Shape.java & Main.java
Shape.java
public class Shape{
public int a;
public void test(){
// test函式中自定義的a
int a = 3;
// this = self的概念
// 表示此類別底下的a(外面的a)
// this也可省略
this.a = 5;
}
}
Main.java
import java.util.Scanner;
public class Main{
public static void main(String[] args){
// 實體化 instance
// sc是Scanner類別的實體
// s1, s2是Shape類別的實體
Scanner sc = new Scanner(System.in);
Shape s1 = new Shape(); //s1 object
Shape s2 = new Shape(); //s2 object
s1.test();
System.out.println(s1.a);
// 因有呼叫test初始化a,a = 5
System.out.println(s2.a);
// 無呼叫test,a = 預設值 = 0
}
}
- 一個檔案只會對應一個class
- class底下可以有多個
屬性attribute
與方法Method
this.attribute
表示現在操作物件底下的屬性
封裝等級
class
封裝等級 | 修飾字 | class | 類別名稱 | extends 父類別 | inplements 介面 |
---|---|---|---|---|---|
public | class | main |
method
封裝等級 | 修飾字 | 輸出值 | 函式名稱 | 輸入值 |
---|---|---|---|---|
public | static | void | main | (int i) |
- 會設定在class或class下一層級 (屬性 / 方法)
- 主要影響 => 直接存取 vs 間接存取
- public: 公用等級資料型態
- private: 私用等級資料型態
- protected: 保護性等集資料型態
- 空白: package等級(預設) => 同一個package底下的class可以存取
間接設定器 mutator / 間接存取器 accessor
public class Student{
private int score;
// mutator (setter)
public void setScore(int score){
if (score < 0 || score > 100){
this.score = 0;
return;
}
this.score = score;
}
// accessor / getter
public int getScore(){
return this.score;
}
}
存取修飾詞與範例
01. static
- 生命週期同程式,在程式創建起來就存在了 (ex. Main)
- 記憶體位置儲存在global裡 (而非stack或heap)
// 範例
// Test.java
public class Test{
// 程式一開始a就存在了
public state int a;
}
// 範例
// Main.java
public class Main{
public static void main(String[] args){
// 故可以直接透過類別名稱取得a,不用經過實體
Test.a = 5;
// 也可透過物件初始化取得
Test t = new Test();
t.a = 5;
// 因t & t2 找到的a是一樣的(global內)
// 故從t2修改會改變變數本身
Test t2 = new Test();
t2.a = 3;
// 故print結果都是3
System.out.println(t.a);
System.out.println(t2.a);
}
}
// 常用作流水號記數
public class Test{
private state int serial;
public state int a;
public Test(){
this.serial++;
this.a = 5;
}
// 因無static,必須透過物件才可使用函式
public int getSerial(){
//是類別的層級
return Test.serial;
}
}
02. final
- 創建後即無法再做修改
- 創建當下必須初始化(因無法再修改)
ex. final int a = 5;
03. static final
- 表示常數
- 變數名稱需全大寫
private static final double PI = 3.14d;
Class建構子: 建構物件時需同時設定的初始值
ex 1. Scanner sc = new Scanner(System.in);
ex 2. Student s1 = new Student(Penny, 85);
class 內部設定
public class Student{
private String name;
private int score;
// 建立建構子,初始時必須輸入資料
// 若無建立,則JAVA會設定為預設 = 0
public Student(String name, int score){
this.name = name;
this.score = score;
}
}