Survey
* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project
Java 程式設計:OOP 類別與物件的介紹
1) 單純將 class 當成記錄(record)或結構(structure)宣告來使用
class Subject
{ String courseName;
int credit;
int hour;
}
public class ClassTalk01
{
public static void main(String[] args) {
Subject s;
s =
new Subject();
// 可合寫成: Subject s = new Subject();
s.courseName = "Java 程式設計";
s.hour = 3;
s.credit = 3;
System.out.println("Subject: "+s.courseName);
System.out.print("credit: "+s.credit+"\nhour:
"+s.hour+"\n");
}
}
輸出結果:
Subject: Java 程式設計
credit: 3
hour: 3
(1)
Java 程式設計:OOP 類別與物件的介紹
2) 同時提供顯示資料的方法 (method or function)
class SubjectWithShow
{ String courseName;
int credit;
int hour;
void show()
{ System.out.println("Subject: "+courseName);
System.out.print("credit: "+credit+"\nhour: "+hour);
}
}
public class ClassTalk02
{
public static void main(String[] args) {
SubjectWithShow s = new SubjectWithShow();
s.courseName = "Java 程式設計";
s.hour = 3;
s.credit = 3;
System.out.println("Subject: "+s.courseName);
System.out.print("credit: "+s.credit+"\nhour:
"+s.hour+"\n");
s.show(); // 物件可以自我顯示其資料內容
}
}
輸出結果:
Subject: Java 程式設計
credit: 3
hour: 3
Subject: Java 程式設計
credit: 3
hour: 3
(2)
Java 程式設計:OOP 類別與物件的介紹
3) 以繼承(inheritance)的方式,達到上述新增 show()的要求
class Subject
{ String courseName;
int credit;
int hour;
}
//不改變原來的 super class Subject
class SubjectShow extends Subject
{ void show()
{ System.out.println("Subject: "+courseName);
System.out.print("credit: "+credit+"\nhour: "+hour);
}
}
public class ClassTalk03
{
public static void main(String[] args) {
SubjectShow s = new SubjectShow();
s.courseName = "Java 程式設計";
s.hour = 3;
s.credit = 3;
System.out.println("東南資通系:大學部選修課程");
System.out.println("Subject: "+s.courseName);
System.out.print("credit: "+s.credit+"\nhour: "+s.hour);
s.show();
}
}
輸出結果:
Subject: Java 程式設計
credit: 3
hour: 3
東南資通系:大學部選修課程
Subject: Java 程式設計
credit: 3
hour:3
(3)
Java 程式設計:OOP 類別與物件的介紹
4) 以繼承(inheritance)的方式,修改 SubjectWithShow.show()的顯示內容
class SubjectWithShow
{ String courseName;
int credit;
int hour;
void show()
{ System.out.println("Subject: "+courseName);
System.out.print("credit: "+credit+"\nhour: "+hour);
}
}
class SubjectShowAdd extends SubjectWithShow
{ void show()
{ System.out.println(“\n 東南資通系:大學部選修課程”);
super.show();
// super 表示其上一層類別,也就是其父類別或基礎類別
}
}
public class ClassTalk04
{
public static void main(String[] args) {
SubjectShowAdd s = new SubjectShowAdd();
s.courseName = "Java 程式設計";
s.hour = 3;
s.credit = 3;
System.out.println("Subject: "+s.courseName);
System.out.print("credit: "+s.credit+"\nhour: "+s.hour);
s.show();
}
}
輸出結果:
Subject: Java 程式設計
credit: 3
hour: 3
東南資通系:大學部選修課程
Subject: Java 程式設計
credit: 3
hour: 3
(4)
Java 程式設計:OOP 類別與物件的介紹
5) 以繼承(inheritance)的方式,改寫 show()的顯示內容
class SubjectWithShow
{ String courseName;
int credit;
int hour;
void show()
{ System.out.println("Subject: "+courseName);
System.out.print("credit: "+credit+"\nhour: "+hour);
}
}
class SubjectShowNew extends SubjectWithShow
{ void show() //不使用 super class 中的 show()
{ System.out.println("My new show():");
System.out.println( courseName+"("+ credit +"/"+
hour +")" );
}
}
public class ClassTalk05
{
public static void main(String[] args) {
SubjectShowNew s = new SubjectShowNew();
s.courseName = "Java 程式設計";
s.hour = 3;
s.credit = 1;
System.out.println("Subject: "+s.courseName);
System.out.print("credit: "+s.credit+"\nhour:
"+s.hour+”\n”);
s.show();
}
}
輸出結果:
Subject: Java 程式設計
credit: 1
hour: 3
My new show():
Java 程式設計(1/3)
(5)
Java 程式設計:OOP 類別與物件的介紹
6) 新增資料項目並改寫原類別的方法
class SubjectShow extends Subject
{ void show()
{ System.out.println("Subject: "+courseName);
System.out.print("credit: "+credit+"\nhour:
"+hour+"\n");
}
}
class SubjectShowAddNewData extends SubjectWithShow
{ String teacher;
void show()
{ System.out.println("東南資通系:大學部選修課程");
System.out.println("teacher: " + teacher);
super.show();
}
}
public class ClassTalk06 {
public static void main(String[] args) {
SubjectShowAddNewData s = new SubjectShowAddNewData();
s.courseName = "Java 程式設計";
s.hour = 3;
s.credit = 3;
s.teacher = "Rich Wang";
s.show();
}
}
輸出結果:
東南資通系:大學部選修課程
teacher: Rich Wang
Subject: Java 程式設計
credit: 3
hour: 3
(6)
Java 程式設計:OOP 類別與物件的介紹
7) 提供建構者(constructor)的類別
class SubjectCon
{ String courseName;
int credit;
int hour;
public SubjectCon(String course, int credit, int hours)
{ courseName = course;
this.credit = credit;
hour = hours;
}
public SubjectCon() {}
// 也可以不必給定初值,但必須是上述給法中的一種!
}
public class ClassTalk07 {
public static void main(String[] args) {
SubjectCon s = new SubjectCon("Java 程式設計",1 ,3);
//s.courseName = "Java 程式設計";
//s.hour =1;
//s.credit = 3;
System.out.println("Subject: "+s.courseName);
System.out.print("credit: "+s.credit+"\nhour: "+s.hour);
}
}
輸出結果:
Subject: Java 程式設計
credit: 1
hour: 3
(7)
Java 程式設計:OOP 類別與物件的介紹
8) 設定 class 中成員的存取限制
class SubjectHideMe //將其放在其他目錄中會有不同的結果。
{ private String courseName; //個別指定不必照順序
public
int hour;
private int credit;
void show()
{ System.out.println("Subject: "+courseName);
System.out.print("credit: "+credit+"\nhour:
"+hour+"\n");
}
}
public class ClassTalk08
{
public static void main(String[] args) {
SubjectHideMe s = new SubjectHideMe();
s.courseName = "Java 程式設計"; // Error (private)
s.hour = 3;
// OK (public)
s.credit = 3;
// Error (private)
s.show();
}
}
指定資料或方法得存取限定子 (modifier):
private:
僅能在類別宣告中使用。
public:
類別與物件均能存取該資料成員(data member)或成員方法(member method)
default (即未指定):
未指定其存取限定,如 void show(),可被同一 package(目錄)中的類別與物件
取用。
protected:
幾乎等同於 private,但允許在其衍生類別中與同目錄中的類別使用此型的資
料與方法。
(8)
Java 程式設計:OOP 類別與物件的介紹
9) 為 class 中限制存取的成員,提供存取方法:getter & setter
class SubjectHideMe
{ private String courseName;
private int credit;
public int hour;
void show()
{ System.out.println("Subject: "+courseName);
System.out.print("credit: "+credit+"\nhour:
"+hour+"\n");
}
public void setCourseName(String course)
{ courseName = course;
}
public String getCourseName()
{ return (courseName);
}
public void setCredit(int credit)
{ this.credit = credit;
}
public int getCredit()
{ return (credit);
}
}
public class ClassTalk09 {
public static void main(String[] args) {
SubjectHideMe s = new SubjectHideMe();
s.setCourseName("Java 程式設計"); // OK
s.hour = 3;
// OK
s.setCredit(3);
// OK
s.show();
}
}
(9)
Java 程式設計:OOP 類別與物件的介紹
10) 說明 OOP 中多型(polymorphism)觀念的一個例子:
public class PolymorphismDemo {
public static void main(String[] args)
{ // polymorphism demo:
SubjectWithShow[] subject = new SubjectWithShow[2];
subject[0] = new RequiredSubject("電路學",3,3);
subject[1] = new SelectedSubject("Java 程式設計",1,3);
for (int k=0; k<subject.length; k++) // => key point
subject[k].show();
}
}
class RequiredSubject extends SubjectWithShow
{ public RequiredSubject(String course, int credit,
int hour)
{ courseName = course;
this.credit = credit;
this.hour = hour;
}
public void show()
{ System.out.println("Required Subject:"); // new added
super.show();
}
}
class SelectedSubject extends SubjectWithShow
{ public SelectedSubject(String course, int credit, int
hour)
{ courseName = course;
this.credit = credit;
this.hour = hour;
}
public void show()
{ System.out.println("Selected Subject:");
super.show();
}
}
( 10 )
Java 程式設計:OOP 類別與物件的介紹
class SubjectWithShow
{ String courseName;
int credit;
int hour;
void show()
{ System.out.println("Subject: "+courseName);
System.out.print("credit: "+credit+"\nhour:
"+hour+"\n");
}
}
( 11 )