Java程序设计-2024-2025学年第二学期

刘香菊、董立凯、刘媛

目录

  • 1 Java入门
    • 1.1 课程标准
    • 1.2 教学日历
    • 1.3 说课
    • 1.4 Java的地位
    • 1.5 Java的特点
    • 1.6 安装JDK
    • 1.7 Java程序的开发步骤
    • 1.8 简单的Java应用程序
    • 1.9 Java反编译
    • 1.10 编程风格
    • 1.11 Java之父--James Gosling
    • 1.12 小结
    • 1.13 讲义
    • 1.14 JDK开发环境和机构化程序设计
    • 1.15 实验:一个简单的应用程序
    • 1.16 上机练习:联合编译
    • 1.17 章节测验
    • 1.18 复习
  • 2 基本数据类型与数组
    • 2.1 教学目标
    • 2.2 学习任务单
    • 2.3 说课
    • 2.4 标识符与关键字
    • 2.5 基本数据类型
    • 2.6 类型转换运算
    • 2.7 输入、输出数据
    • 2.8 数组
    • 2.9 应用举例
    • 2.10 小结
    • 2.11 实验:输出希腊字母表
    • 2.12 上机练习:数组的引用与元素
    • 2.13 上机练习:遍历与复制数组
    • 2.14 章节测验
    • 2.15 复习
  • 3 运算符、表达式和语句
    • 3.1 说课
    • 3.2 运算符与表达式
    • 3.3 语句概述
    • 3.4 if条件分支语句
    • 3.5 switch开关语句
    • 3.6 循环语句
    • 3.7 break和continue语句
    • 3.8 for语句与数组
    • 3.9 应用举例
    • 3.10 小结
    • 3.11 上机练习:回文数
    • 3.12 上机练习:猜数字游戏
    • 3.13 章节测验
    • 3.14 复习
  • 4 类与对象
    • 4.1 说课
    • 4.2 编程语言的几个发展阶段
    • 4.3 类
    • 4.4 构造方法与对象的创建
    • 4.5 类与程序的基本结构
    • 4.6 参数传值
    • 4.7 对象的组合
    • 4.8 实例成员与类成员
    • 4.9 方法重载
    • 4.10 this关键字
    • 4.11 包
    • 4.12 import语句
    • 4.13 访问权限
    • 4.14 基本类型的类封装
    • 4.15 对象数组
    • 4.16 JRE扩展与jar文件
    • 4.17 文档生成器
    • 4.18 应用举例
    • 4.19 小结
    • 4.20 实验:机动车
    • 4.21 上机练习:家中的电视
    • 4.22 上机练习:共饮同井水
    • 4.23 实验:求方程的根
    • 4.24 章节测验
    • 4.25 复习
  • 5 子类与继承
    • 5.1 说课
    • 5.2 子类与父类
    • 5.3 子类的继承性
    • 5.4 子类与对象
    • 5.5 成员变量的隐藏和方法重写
    • 5.6 super关键字
    • 5.7 final关键字
    • 5.8 对象的上转型对象
    • 5.9 继承与多态
    • 5.10 abstract类和abstract方法
    • 5.11 面向抽象编程
    • 5.12 开-闭原则
    • 5.13 应用举例
    • 5.14 小结
    • 5.15 上机练习:中国人、北京人和美国人
    • 5.16 实验:银行计算利息
    • 5.17 实验:公司支出的总薪水
    • 5.18 章节测验
    • 5.19 复习
  • 6 接口与实现
    • 6.1 说课
    • 6.2 接口
    • 6.3 实现接口
    • 6.4 接口的UML图
    • 6.5 接口回调
    • 6.6 理解接口
    • 6.7 接口与多态
    • 6.8 接口参数
    • 6.9 abstract类与接口的比较
    • 6.10 面向接口编程
    • 6.11 应用举例
    • 6.12 小结
    • 6.13 实验:评价成绩
    • 6.14 实验:货车的装载量
    • 6.15 上机练习:小狗的状态
    • 6.16 章节测验
    • 6.17 新建课程目录
  • 7 内部类与异常类
    • 7.1 说课
    • 7.2 内部类
    • 7.3 匿名类
    • 7.4 异常类
    • 7.5 断言
    • 7.6 应用举例
    • 7.7 小结
    • 7.8 上机练习:内部购物券
    • 7.9 上机练习:检查危险品
    • 7.10 章节测验
    • 7.11 复习
  • 8 常用实用类
    • 8.1 说课
    • 8.2 String类
    • 8.3 StringTokenizer类
    • 8.4 Scanner类
    • 8.5 StringBuffer类
    • 8.6 Date类与Calendar类
    • 8.7 日期的格式化
    • 8.8 Math类、BigInteger类和Random类
    • 8.9 数字格式化
    • 8.10 Class类与Console类
    • 8.11 Pattern类与Matcher类
    • 8.12 应用举例
    • 8.13 小结
    • 8.14 上机练习:检索简历
    • 8.15 实验:菜单的价格
    • 8.16 上机练习:比较日期
    • 8.17 上机练习:处理大整数
    • 8.18 实验:替换错别字
    • 8.19 章节测验
    • 8.20 复习
  • 9 组件及事件处理
    • 9.1 说课
    • 9.2 Java Swing概述
    • 9.3 窗口
    • 9.4 常用组件与布局
    • 9.5 处理事件
    • 9.6 使用MVC结构
    • 9.7 对话框
    • 9.8 树组件与表格组件
    • 9.9 按钮绑定到键盘
    • 9.10 打印组件
    • 9.11 发布GUI程序
    • 9.12 应用举例
    • 9.13 小结
    • 9.14 实验:算术测试
    • 9.15 实验:布局与日历
    • 9.16 实验:英语单词拼写训练
    • 9.17 实验:字体对话框
    • 9.18 章节测验
    • 9.19 复习
  • 10 输入、输出流
    • 10.1 说课
    • 10.2 File类
    • 10.3 文件字节输入流
    • 10.4 文件字节输出流
    • 10.5 文件字符输入、输出流
    • 10.6 缓冲流
    • 10.7 随机流
    • 10.8 数组流
    • 10.9 数据流
    • 10.10 对象流
    • 10.11 序列化与对象克隆
    • 10.12 使用Scanner解析文件
    • 10.13 文件对话框
    • 10.14 带进度条的输入流
    • 10.15 文件锁
    • 10.16 应用举例
    • 10.17 小结
    • 10.18 上机练习:分析成绩单
    • 10.19 实验:统计英文单词
    • 10.20 实验:读取压缩文件
    • 10.21 章节测验
  • 11 JDBC与MySQL数据库
    • 11.1 说课
    • 11.2 MySQL数据库管理系统
    • 11.3 启动MySQL数据库服务器
    • 11.4 MySQL客户端管理工具
    • 11.5 JDBC
    • 11.6 连接数据库
    • 11.7 查询操作
    • 11.8 更新、添加与删除操作
    • 11.9 使用预处理语句
    • 11.10 通用查询
    • 11.11 事务
    • 11.12 连接SQL Server数据库
    • 11.13 连接Derby数据库
    • 11.14 应用举例
    • 11.15 小结
    • 11.16 上机练习:抽取样本
    • 11.17 上机练习:用户转账
    • 11.18 上机练习:查询Excel电子表格
    • 11.19 章节测验
  • 12 Java多线程机制
    • 12.1 进程与线程
    • 12.2 Java中的线程
    • 12.3 Thread类与线程的创建
    • 12.4 线程的常用方法
    • 12.5 线程同步
    • 12.6 协调同步的线程
    • 12.7 线程联合
    • 12.8 GUI线程
    • 12.9 计时器线程
    • 12.10 守护线程
    • 12.11 应用举例
    • 12.12 小结
    • 12.13 上机练习:键盘操作练习
    • 12.14 上机练习:双线程猜数字
    • 12.15 上机练习:汉字打字练习
    • 12.16 上机练习:月亮围绕地球
    • 12.17 章节测验
  • 13 Java网络编程(自学)
    • 13.1 URL类
    • 13.2 InetAddress类
    • 13.3 套接字
    • 13.4 UDP数据报
    • 13.5 广播数据报
    • 13.6 Java远程调用
    • 13.7 应用举例
    • 13.8 小结
    • 13.9 上机练习:读取服务器端文件
    • 13.10 上机练习:会结账的服务器
    • 13.11 上机练习:读取服务器端的窗口
    • 13.12 上机练习:与服务器玩猜数游戏
    • 13.13 上机练习:传输图像
    • 13.14 章节测验
  • 14 图形、图像与音频
    • 14.1 绘制基本图形
    • 14.2 变换图形
    • 14.3 图形的布尔运算
    • 14.4 绘制钟表
    • 14.5 绘制图像
    • 14.6 播放音频
    • 14.7 应用举例
    • 14.8 小结
    • 14.9 上机练习:转动的风扇
    • 14.10 上机练习:制作JPG格式的图像
    • 14.11 上机练习:基于图像的小动画
    • 14.12 章节测验
  • 15 泛型与集合框架(自学)
    • 15.1 泛型
    • 15.2 链表
    • 15.3 堆栈
    • 15.4 散列映射
    • 15.5 树集
    • 15.6 树映射
    • 15.7 自动装箱与拆箱
    • 15.8 应用举例
    • 15.9 小结
    • 15.10 上机练习:搭建流水线
    • 15.11 上机练习:排序与查找
    • 15.12 上机练习:使用TreeSet排序
    • 15.13 上机练习:扫雷小游戏
    • 15.14 章节测验
  • 16 Java课程设计
    • 16.1 课程设计任务书
    • 16.2 课程设计报告模板
复习

第5章  子类与对象 复习

第5章  子类与对象  复习

第5章  子类与对象  复习2

第5章 子类与对象 复习3

习题五

一、问答题

1.子类可以有多个父类吗?

不可以。

2.java.lang包中的Object类是所有其他类的祖先类吗?

 是。

3.如果子类和父类不在同一个包中,子类是否继承父类的友好成员?

   不继承。

4.子类怎样隐藏继承的成员变量?

   声明与父类同名的成员变量。

5.子类重写方法的规则是怎样的?重写方法的目的是什么?

   子类重写的方法类型和父类的方法的类型一致或者是父类的方法的类型的子类型,重写的方法的名字、参数个数、参数的类型和父类的方法完全相同。重写方法的目的是隐藏继承的方法,子类通过方法的重写可以把父类的状态和行为改变为自身的状态和行为。

6.父类的final方法可以被子类重写吗?

   不可以。

7.什么类中可以有abstract方法?

   abstract类。

8.对象的上转型对象有怎样的特点?

   上转型对象不能操作子类新增的成员变量,不能调用子类新增的方法。上转型对象可以访问子类继承或隐藏的成员变量,可以调用子类继承的方法或子类重写的实例方法。

9.一个类的各个子类是怎样体现多态的? 

   通过重写方法。

10.面向抽象编程的目的和核心是什么?

   面向抽象编程目的是为了应对用户需求的变化,核心是让类中每种可能的变化对应地交给抽象类的一个子类类去负责,从而让该类的设计者不去关心具体实现。

 ---视频讲解--


二、选择题

1.下列哪个叙述是正确的?
A.子类继承父类的构造方法。
B.abstract类的子类必须是非abstract类。
C.子类继承的方法只能操作子类继承和隐藏的成员变量。
D.子类重写或新增的方法也能直接操作被子类隐藏的成员变量。
  C。
----视频讲解--



2.下列哪个叙述是正确的?
A. final 类可以有子类。
B. abstract类中只可以有abstract方法。
C. abstract类中可以有非abstract方法,但该方法不可以用final修饰。
D. 不可以同时用final和abstract修饰同一个方法。
E. 允许使用static修饰abstract方法。
  D。(不能同时用abstract 和final 修饰一个方法
3.下列程序中注释的哪两个代码(A,B,C,D)是错误的(无法通过编译)?
class Father {
   private int money =12;
   float height;
   int seeMoney(){
      return money ;           //A
   } 
}
class Son extends Father {
   int height;
   int lookMoney() {
      int m = seeMoney();      //B
      return m;             
   }
}
class E {
   public static void main(String args[]) {
      Son erzi = new Son();
      erzi.money = 300;       //C
      erzi.height = 1.78F;      //D
   }
}
  CD。
---视频讲解--


4.假设C是B的子类,B是A的子类,cat是C类的一个对象,bird是B类的一个对象,下列哪个叙述是错误的?
A. cat instanceof B的值是true。
B. bird instanceof A的值是true。
C. cat instanceof A的值是true。
D. bird instanceof C的值是true。
  D。
5.下列程序中注释的哪个代码(A,B,C,D)是错误的(无法通过编译)?
class A {
   static int m;
   static void f(){
       m = 20 ;          //A
   } 
}
class B extends A {
   void f()              //B
   {  m = 222 ;         //C      
   } 
}
class E {
   public static void main(String args[]) {
      A.f();            // D    
   }
}
  B。
---视频讲解--


6.下列代码中标注的(A,B,C,D)中,哪一个是错误的?
abstract class Takecare {
    protected void speakHello() {}     //A
    public abstract static void cry();    //B
    static int f(){ return 0 ;}          //C
    abstract float g();                //D
}
  B。(不能同时用abstract 和static 修饰一个方法
7.下列程序中注释的哪个代码(A,B,C,D)是错误的(无法通过编译)?
abstract class A {            
   abstract float getFloat ();  //A
   void f()                //B
   { }
}
public class B extends A {
   private float m = 1.0f;      //C
   private float getFloat ()     //D
   {  return m;
   }
}
 D。(重写时,不可以降低方法的访问权限)
8.将下列哪个代码(A,B,C,D)放入程序中标注的【代码】处将导致编译错误?
A. public float getNum(){return 4.0f;} 
B. public void getNum(){ } 
C. public void getNum(double d){ } 
D. public double getNum(float d){return 4.0d;}
class A { 
   public float getNum() {
       return 3.0f;
   }     
public class B extends A { 
      【代码】
}  
  B。
---视频讲解--



9.对于下列代码,下列哪个叙述是正确的?
A. 程序提示编译错误(原因是A类没有不带参数的构造方法) 
B. 编译无错误,【代码】输出结果是0。 
C. 编译无错误,【代码】输出结果是1。 
D. 编译无错误,【代码】输出结果是2。
class A { 
   public int i=0; 
   A(int m) { 
     i = 1; 
   } 
public class B extends A {
    B(int m) { 
       i = 2; 
    } 
    public static void main(String args[]){ 
       B b = new B(100); 
       System.out.println(b.i); //【代码】
    } 
}
 A。

--视频讲解--

三、阅读程序

1.请说出E类中【代码1】,【代码2】的输出结果。

class A {
   double f(double x,double y) {
     return x+y;
   }
}
class B extends A {
   double f(int x,int y) {
     return x*y;
  }
}
public class E {
public static void main(String args[]) {
      B b=new B();
      System.out.println(b.f(3,5));     //【代码1】
      System.out.println(b.f(3.0,5.0));  //【代码2】
  }
}

【代码1】:15.0。【代码2】:8.0。

---视频讲解---


2.说出下列B类中【代码1】,【代码2】的输出结果。

class A { 
   public int getNumber(int a) { 
      return a+1; 
   } 
class B extends A { 
   public int getNumber (int a) { 
      return a+100;
   } 
   public static void main (String args[])  { 
      A a =new A();
      System.out.println(a.getNumber(10));  //【代码1】
      a = new B(); 
      System.out.println(a.getNumber(10));  //【代码2】
   } 
}

【代码1】:11。【代码2】:110。

--视频讲解--


3.请说出E类中【代码1】~【代码4】的输出结果。

class A {
double f(double x,double y) {
      return x+y;
   }
   static int g(int n) {
      return n*n;
   }
}
class B extends A {
   double f(double x,double y) {
      double m = super.f(x,y);
      return m+x*y;
   }
   static int g(int n) {
      int m = A.g(n); 
      return m+n;
   }
}
public class E {
   public static void main(String args[]) {
     B b = new B();
     System.out.println(b.f(10.0,8.0));   //【代码1】
     System.out.println(b.g(3));        //【代码2】
     A a = new B();
     System.out.println(a.f(10.0,8.0));   //【代码3】
     System.out.println(a.g(3));        //【代码4】
  }
}

【代码1】:98.0。【代码2】:12。【代码3】:98.0。【代码4】:9。

--视频讲解--

4.请说出E类中【代码1】~【代码3】的输出结果。

class A {
   int m;
   int getM() {
      return m;
   }
   int seeM() {
       return m;
   }
}
class B extends A {
     int m ; 
     int getM() {
        return m+100;
     }
}
public class E {
public static void main(String args[]) {
     B b = new B();
     b.m = 20;
     System.out.println(b.getM());  //【代码1】
     A a = b;
     a.m = -100;                 // 上转型对象访问的是被隐藏的m 
     System.out.println(a.getM());  //【代码2】上转型对象调用的一定是子类重写的getM()方法
     System.out.println(b.seeM()); //【代码3】子类继承的seeM()方法操作的m是被子类隐藏的m
  }
}

【代码1】:120。【代码2】:120。【代码3】:-100。

---视频讲解--