面向对象程序设计
Created: 2024-09-04 Wed 20:52
抽象 是科学研究中经常使用的一种方法,即 去除 掉被研究对象中与主旨无关的 次要 部分, 或是暂时不予考虑的部分,而仅仅 抽取 出与研究工作有关的 实质 性的内容加以考察。
%%{init: { 'theme': 'forest', 'fontFamily': 'Times New Roman, KaiTi' }}%%
graph TB
abstract["抽象"]
abstract --- process["过程抽象"]
abstract --- data["数据抽象"]
Figure 1: 抽象的分类
封装 是指利用 抽象数据类型 将 数据 和基于数据的
操作 封装在一起,数据被保护在 抽象数据类型的内部 , 系统的其他部分只有通过包裹在 数据 外面的 被授权 的 操作 ,才能够与这个 抽象数据类型 交流 和 交互 。
参考教材
https://docs.oracle.com/en/java/javase/18/docs/api/index.html
https://docs.oracle.com/en/java/javase/18/docs/api/java.base/module-summary.html
https://docs.oracle.com/en/java/javase/18/docs/api/java.desktop/module-summary.html
[类的修饰字] class 类名称 [extends 父类名称][implements 接口名称列表] { 变量定义及初始化语句 方法定义及方法体 }
%%{init: { 'theme': 'forest', 'fontFamily': 'Times New Roman, KaiTi' }}%%
graph LR
Class["类"]
Class --- ClassHead["类头"]
Class --- ClassBody["类体"]
ClassBody --- Domain["域"]
Domain --- Static["静态属性"]
ClassBody --- Method["方法"]
Method --- Behavior["类的行为"]
Method --- Operation["操作"]
Figure 2: 类的结构
class PhoneCard {
long cardNumber; // 电话卡卡号
private int password; // 电话卡密码
double balance; // 电话卡余额
String connectNumber; // 电话卡接入号码(预拨号码)
boolean connected; // 电话是否接通
boolean performConnection(long cn, int pw) { // 实现接入电话的操作
if(cn == cardNumber && pw == password ) {
connected = true;
return true;
}
else {
connected = false;
return false;
}
}
double getBalance() { // 检查电话是否接通,接通则返回当前余额
if(connected)
return balance;
else
return -1;
}
void performDial() { // 检查电话是否接通,接通则扣除本次话费
if(connected)
balance -= 0.5;
}
}
class PhoneCard { }
PhoneCard myCard = new PhoneCard();
类名 新建对象名 = new 构造函数();
参考教材
PhoneCard(long cn, int pw, double b,String s) {
cardNumber = cn;
password = pw;
balance = b;
connectNumber = s;
connected = false;
}
class PhoneCard {
long cardNumber; // 电话卡卡号
private int password; // 电话卡密码
double balance; // 电话卡余额
String connectNumber; // 电话卡接入号码(预拨号码)
boolean connected; // 电话是否接通
PhoneCard(long cn, int pw, double b,String s) {
cardNumber = cn;
password = pw;
balance = b;
connectNumber = s;
connected = false;
}
boolean performConnection(long cn, int pw) { // 实现接入电话的操作
if(cn == cardNumber && pw == password ) {
connected = true;
return true;
}
else {
connected = false;
return false;
}
}
double getBalance() { // 检查电话是否接通,接通则返回当前余额
if(connected)
return balance;
else
return -1;
}
void performDial() { // 检查电话是否接通,接通则扣除本次话费
if(connected)
balance -= 0.5;
}
}
PhoneCard newCard = new PhoneCard(12345678, 1234, 50.0, "300");
public class UsePhoneCard {
public static void main(String args[]) {
PhoneCard myCard = new PhoneCard(12345678, 1234, 50.0, "300");
System.out.println(myCard.toString());
}
}
class PhoneCard {
long cardNumber; // 电话卡卡号
private int password; // 电话卡密码
double balance; // 电话卡余额
String connectNumber; // 电话卡接入号码(预拨号码)
boolean connected; // 电话是否接通
PhoneCard(long cn, int pw, double b,String s) {
cardNumber = cn;
password = pw;
if(b > 0)
balance = b;
else
System.exit(1);
connectNumber = s;
connected = false;
}
boolean performConnection(long cn, int pw) { // 实现接入电话的操作
if(cn == cardNumber && pw == password ) {
connected = true;
return true;
}
else {
connected = false;
return false;
}
}
double getBalance() { // 检查电话是否接通,接通则返回当前余额
if(connected)
return balance;
else
return -1;
}
void performDial() { // 检查电话是否接通,接通则扣除本次话费
if(connected)
balance -= 0.5;
}
public String toString() {
String s = "电话卡接入号码:" + connectNumber
+ "\n电话卡卡号:" + cardNumber
+ "\n电话卡密码:" + password
+ "\n电话卡余额:" + balance;
if(connected)
return (s + "\n电话已接通。");
else
return (s + "\n电话未接通。");
}
}
电话卡接入号码:300 电话卡卡号:12345678 电话卡密码:1234 电话卡余额:50.0 电话未接通。
参考教材
%%{init: { 'theme': 'forest', 'fontFamily': 'Times New Roman, KaiTi' }}%%
graph TB
Card["电话卡"]
Card --- CardWithoutNumber["无卡号电话卡"]
Card --- CardWithNumber["有卡号电话卡"]
CardWithoutNumber --- OriginalCard["电话磁卡"]
CardWithoutNumber --- ICCard["电话IC卡"]
CardWithNumber --- IPCard["IP卡"]
CardWithNumber --- The200Card["200卡"]
Figure 3: 各种电话卡类及其间的继承关系
参考教材
%%{init: { 'theme': 'forest', 'fontFamily': 'Times New Roman, KaiTi' }}%%
graph TB
Polymorphism["多态"]
Polymorphism --- ThroughOverload["方法覆盖实现的多态"]
Polymorphism --- ThroughOverride["方法重载实现的多态"]
Polymorphism --- ThroughReference["对象引用的多态"]
Figure 4: 几种实现多态的方式