本文最后更新于 1 年前 ,文中信息可能已经过时。如有问题请在评论区留言。

Java 程序设计

定义类:
接口类、抽象类。接口类中的函数定义可以通过代码判断。

设计类:
填写函数体,通常以调用形式出现。可通过程序或说明或类图中找到。

  • 接口 interfaceimplements 实现;抽象类用 abstract classextends 继承。
  • 抽象类中可以有普通方法(有函数体),也可以有抽象方法(无函数体,方法前要加关键字 abstract),接口中的方法默认为抽象方法,因此无需加关键标识。
  • this 用来指代当前对象,一般有两个重名变量的赋值时会使用到,如在构造函数中,局部变量和成员变量相同都为 name,就要使用 this.name = name
  • 调用父类的方法用 super
  • 认真看类图,类图中可以看到类之间的关系以及类中的方法。

真题示例 1

某图书管理系统中管理着两种类型的文献:图书和论文。现在要求统计所有馆藏文献的总页码(假设图书馆中有一本 540 页的图书和两篇各 25 页的论文,那么馆藏文献的总页码就是 590 页)。采用 Visitor(访问者)模式实现该要求,得到如图 6-1 所示的类图。

d4e11b3eb75f3a3a3004a8d0f4a5d2c4

【Java 代码】

java
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import java.util.*;

interface LibraryVisitor {
	____(1)______;
	____(2)______;
	void printSum();
}

class LibrarySumPrintVisitor implements LibraryVisitor { // 打印总页数
	private int sum = 0;
	
	public void visit(Book p_book) {
		sum = sum + p_book.getNumberOfPages();
	}
	
	public void visit(Article p_article) {
		sum = sum + p_article.getNumberOfPages();
	}
	
	public void printSum() {
		System.out.println("SUM=" + sum);
	}
}

interface LibraryItemInterface {
	____(3)______;
}

class Article implements LibraryItemInterface {
	private String m_title; // 论文名
	private String m_author; // 论文作者
	private int m_start_page;
	private int m_end_page;
	
	public Article(String p_author, String p_title, int p_start_page, int p_end_page) {
		m_title = p_title;
		m_author = p_author;
		m_start_page = p_start_page;
		m_end_page = p_end_page;
	}
	
	public int getNumberOfPages() {
		return m_end_page - m_start_page;
	}
	
	public void accept(LibraryVisitor visitor) {
		____(4)______;
	}
}

class Book implements LibraryItemInterface {
	private String m_title; // 书名
	private String m_author; // 书作者
	private int m_pages; // 页数
	
	public Book(String p_author, String p_title, int p_pages) {
		m_title = p_title;
		m_author = p_author;
		m_pages = p_pages;
	}
	
	public int getNumberOfPages() {
		return m_pages;
	}
	
	public void accept(LibraryVisitor visitor) {
		____(5)______;
	}
}

真题示例 - 2

试题五(共 15 分)

阅读下列说明和 Java 代码,将应填入(n)处的字句写在答题纸的对应栏内。

【说明】
享元(flyweight)模式主要用于减少创建对象的数量,以降低内存占用,提高性能。现要开发一个网络围棋程序,允许多个玩家联机下棋。由于只有一台服务器,为节省内存空间,采用享元模式实现该程序,得到如图 6-1 所示的类图。

8125d7fbfd61fd807dafa61b304d83f5

【Java 代码】

java
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import java.util.*;

enum PieceColor { BLACK, WHITE } // 棋子颜色

class PiecePos {	// 棋子位置
	private int x;
	private int y;
	public PiecePos(int a, int b) { x = a; y = b; }
	public int getX() { return x; }
	public int getY() { return y; }
}

abstract class Piece { // 棋子定义
	protected PieceColor m_color;	// 颜色
	protected Piecemopos m_pos; // 位置
	public Piece(PieceColor color, PiecePos pos) {
		m_color = color;
		m_pos = pos;
	}
	______(1)______;
}

class BlackPiece extends Piece {
	public BlackPiece(PieceColor color, PiecePos pos) { super(color, pos); }
	public void draw() {
		System.out.println("draw a black piece");
	}
}

class WhitePiece extends Piece {
	public WhitePiece(PieceColor color, PiecePos pos) { super(color, pos); }
	public void draw() {
		System.out.println("draw a black piece");
	}
}

class PieceBoard {	// 棋盘上已有的棋子
	private static final ArrayList<___(2)____> m_arrayPiece = new ArrayList<>();
	private String m_blackName; // 黑方名称
	private String m_whiteName; // 白方名称
	
	public PieceBoard(String black, String white) {
		m_blackName = black;
		m_whiteName = white;
	}
}

// 一步棋,在期盼上放一颗棋子
public void SetPiece(PieceColor color, PiecePos pos) {
	____(3)____ piece = null;
	if (color == PieceColor.BLACK) {	// 放黑子
		piece = new BlackPiece(color, pos);	// 获取一颗黑子
		System.out.println(m_blackName + "在位置(" + "pos.getX()" + "," + "pos.getY()" + ")");
		_____(4)_____;
	} else { // 放白子
		piece = new WhitePiece(color, pos); // 获取一颗白子
		System.out.println(m_whiteName + "在位置(" + "pos.getX()" + "," + "pos.getY()" + ")");
		_____(5)_____;
	}
	m_arrayPiece.add(piece);
}

真题答案

真题示例 1

(1)void visit(Book p_book);
(2)void visit(Article p_article);
(3)int getNumberOfPages();
(4)visitor.visit(this);
(5)visitor.visit(this);

真题示例 2

(1)public abstract void draw();
(2)Piece
(3)Piece
(4)piece.draw()
(5)piece.draw()