Java第三次作业——面向对象基础(封装)

(一)学习总结

1.什么是面向对象的封装性,Java中是如何实现封装性的?试举例说明。

  • 封装性

    封装性是面向对象的方法所应遵循的一个重要原则,它有两个含义:一是值把对象的属性和行为看成一个密不可分的整体,将这两者“封装”在一个不可分割的独立单位(即对象)中,另一层含义值“信息隐蔽”,把不需要让外界知道的信息隐藏起来,有些对象的属性及行为允许外界用户知道或使用,但不允许更改,而另一些属性或行为。则不允许外界知道,或只允许适用对象的功能,而尽可能隐蔽对象的功能实现细节 (课本93页)
  • 如何实现封装

    属性封装:private 属性类型 属性名称;

    方法封装:private 方法返回值 方法名称{}

    只要是被封装的属性,必须通过setter和getter方法设置和取得。

    用private声明的属性或方式只能在其类的内部被调用,而不能在外部调用。

2.阅读下面程序,分析是否能编译通过?如果不能,说明原因。

(1)不能,private使得属性secret为私有的,所以不能由对象直接进行访问

修改后的程序

    class test{
static int secret = 5;
}
public class Test{
public static void main(String args[]){
A a = new A();
System.out.println(a.secret++);
}
}

(2)不能,都为static才可调用

修改后的程序

    public class Test{
static int x = 50;
static int y = 200;
public static void method(){
System.out.println(x+y);
}
public static void main(String args[]){
Test.method();
}
}

3 . 使用类的静态变量和构造方法,可以跟踪某个类创建的对象个数。声明一个图书类,数据成员为编号,书名,书价,并拥有静态数据成员册数记录图书的总数。图书编号从1000开始,每产生一个对象,则编号自动递增(利用静态变量和构造方法实现)。下面给出了测试类代码和Book类的部分代码,将代码补充完整。

  • 补充的代码如下

    class Book{

    private int bookId;

    private String bookName;

    private double price;

    // 声明静态变量

    private static int BN;

    //定义静态代码块对静态变量初始化

    static{

     BN=1000;

    }

    //构造方法

    public Book(String bookName,double price){

    this.bookName=bookName;

    this.price=price;

    bookId=BN;

    inID();

    }

    public int getBookId() {

    return bookId;

    }

    public void setBookId(int bookId) {

    this.bookId = bookId;

    }

    public String getBookName() {

    return bookName;

    }

    public void setBookName(String bookName) {

    this.bookName = bookName;

    }

    public double getPrice() {

    return price;

    }

    public void setPrice(double price) {

    this.price = price;

    }

    //定义方法求图书总册数

    static void inID(){

    BN++;

    }

    public static int totalBook(){

    return BN-1000;

    }

    //重写toString方法

    public String toString(){

    return "书号"+this.getBookId()+"书名"+this.getBookName()+"价格"+this.getPrice();

    }

}

public class Text{

public static void main(String args[]){

Book[] books = {new Book("c语言程序设计",29.3),

new Book("数据库原理",30),

new Book("Java学习笔记",68)};

System.out.println("图书总数为:"+ Book.totalBook());

for(Book book:books){

System.out.println(book.toString());

}

}

}

4.什么是单例设计模式?它具有什么特点?用单例设计模式设计一个太阳类Sun。

  • 含义

单例模式确保一个类只有一个实例,自行提供这个实例并向整个系统提供这个实例。

  • 特点

    1.一个类只能有一个实例

    2.自己创建这个实例

    3.整个系统都要使用这个实例

  • 太阳类

        class Sun{
    private static Suninstance = new Sun() ;
    private Sun(){ }
    public static Sun getInstance(){
    return instance ;
    }
    }

5.理解Java参数传递机制,阅读下面的程序,运行结果是什么?说明理由。

    public class Test {
String str = new String("你好 ");
char[] ch = { 'w','o','l','l','d' };
public static void main(String args[]) {
Test test = new Test();
test.change(test.str, test.ch);
System.out.print(test.str);
System.out.print(test.ch);
}
public void change(String str, char ch[]) {
str = "hello";
ch[0] = 'W';
}
}
  • 运行的结果

    你好 Wolld

    ch[]和str传递的内容不一样,前者传递的是地址,后者传递的是值

    6.其他需要总结的内容。

    本次作业完成的不好,以后要多看多翻多记多练,课下还要好好看看程序

(二)实验总结

实验内容:

1.按照下列要求完成类的设计

(1)设计一个日期类,用于记录年、月、日,提供对日期处理的常用方法(日期输出格式xxxx-xx-xx)。

(2)设计一个职工类,该职工类至少具有下面的属性:职工号,姓名,性别,生日,工作部门,参加工作时间,设计相应的方法。

(3)设计一个部门类,包括下列属性:部门编号,部门名称,经理,设计相应方法。

(4)设计一个测试类,采用对象数组模拟一个拥有两个部门,10个职工的单位,实现对相关信息的查询功能。

2.设计一个计算工具类,要求:

(1)为用户提供几个常见的几何体面积和体积的算法(如球的体积和表面积,圆柱体的体积和表面积,圆锥体的体积和表面积)(可以学习使用static关键字)

(2)设计一个测试类,给出几个不同的圆柱体,圆锥体,球体的尺寸,用计算工具类分别求它们体积的累加和与表面积的累加和。

(3)设计一个测试类,随机产生球,圆柱、圆锥体的尺寸,模拟考试,要求用户回答它们的体积和面积,并判断用户的回答是否正确

3.用面向对象编程思想完成评分系统

4.用面向对象编程思想编写猜拳游戏

对完成实验内容过程中遇到的问题、解决方案以及程序的设计思路和思考等进行归纳总结。

  • 实验一

    程序设计思路:分别写出日期类,职工类和部门类所包含的属性,并对所有属性进行封装,封装之后的属性通过setter和getter设置和取得,用测试类输出,参考课本114页例题

    问题:输出语句问题较多

    解决方案:定义类型和输出形式要匹配

(三)代码托管 https://git.oschina.net/hebau_cs15/Java-cs02HQY.git

Java第三次作业——面向对象基础(封装)的更多相关文章

  1. Java第三次作业--面向对象基础(封装)

    Deadline: 2017-4-6 23:00 一.学习要点 认真看书并查阅相关资料,掌握以下内容: 掌握简单类的设计 掌握利用对象引用建立类与类之间的联系 掌握this关键字 掌握static关键 ...

  2. Java第五次作业--面向对象高级特性(抽象类与接口)

    Java第五次作业--面向对象高级特性(抽象类与接口) (一)学习总结 1.在上周完成的思维导图基础上,补充本周的学习内容,对Java面向对象编程的知识点做一个全面的总结. 2.汽车租赁公司,出租汽车 ...

  3. Java第四次作业——面向对象高级特性(继承和多态)

    Java第四次作业--面向对象高级特性(继承和多态) (一)学习总结 1.学习使用思维导图对Java面向对象编程的知识点(封装.继承和多态)进行总结. 2.阅读下面程序,分析是否能编译通过?如果不能, ...

  4. Java第四次作业—面向对象高级特性(继承和多态)

    Java第四次作业-面向对象高级特性(继承和多态) (一)学习总结 1.学习使用思维导图对Java面向对象编程的知识点(封装.继承和多态)进行总结. 2.阅读下面程序,分析是否能编译通过?如果不能,说 ...

  5. JAVA第三周作业(从键盘输入若干数求和)

    JAVA第三周作业(从键盘输入若干数求和) 在新的一周,我学习了JAVA的IO编程.下面的代码实现了从键盘输入若干数求和的目标.import java.util.Scanner; public cla ...

  6. 《Java技术》第二次作业--面向对象基础

    (一)学习总结 1.什么是构造方法?什么是构造方法的重载?下面的程序是否可以通过编译?为什么? public class Test { public static void main(String a ...

  7. java第三阶段作业总结

    Java第三阶段总结 前言 到这里,Java课程学习进入了尾声,在这学习过程中,我学习到很多,也发现了自己的很多不足,这篇博客主要针对的是Java整门课程学习的总结. 课程收获 对整门课程的学习,我有 ...

  8. Java第五次作业--面向对象高级特性(抽象类和接口)

    一.学习要点 认真看书并查阅相关资料,掌握以下内容: 掌握抽象类的设计 掌握接口的设计 理解简单工厂设计模式 理解抽象类和接口的区别 掌握包装类的应用 掌握对象的比较方法和比较器的使用 学习使用日期操 ...

  9. PYDay14:反射、面向对象基础-封装、集成、多态

    1.反射 通过字符串的形式,导入模块再通过字符串的形式,去模块中寻找指定的函数并执行eg:__import__(模块) 更加字符串的形式去对象(某个模块)中操作其成员 常用方法: getattr() ...

随机推荐

  1. 修改SS配置文件使其同时支持IPV4和IPV6网络

    将/etc/shadowsocks-libev/config.json文件中的 "server":"0.0.0.0", 修改为: "server&qu ...

  2. TASE2017

    PATTERN系列之五 I. Introduction To ease the expression of real-time requirements, Dwyer, and then Konrad ...

  3. malloc/free 和 new/delete

    (本文参考于网上) 首先两者都可用于申请动态内存和释放内存。 对于非内部数据类型的对象而言,只用malloc/free无法满足动态对象的要求.对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执 ...

  4. C# 绘制圆角矩形

    Graphics g = e.Graphics; // 圆角半径 ; // 要实现 圆角化的 矩形 Rectangle rect = , , panel4.Width - cRadius, panel ...

  5. R语言环境变量的设置 环境设置函数为options()

    环境设置函数为options(),用options()命令可以设置一些环境变量,使用help(options)可以查看详细的参数信息. 1. 数字位数的设置,options(digits=n),n一般 ...

  6. 简单粗暴的上传项目至 Github

    嗯,写了一个项目,觉得还OK,就想放在 Github 继续维护和方便使用,那么如何简单快速的将代码上传至 Github 上? 1.  你得有自己的 Github账号,如何创建账号这里就不说了.因为.. ...

  7. ES6的小知识(后半部分)

    一.iterator和for-of循环 在js里有数组和对象,es6又新出现了set和map这样js就有了四种数据集合,这样可以组合使用他们,比如数组里拥有对象,set等,这样就需要一个统一的 接口机 ...

  8. 第 8 章 容器网络 - 070 - 如何定制 Calico 网络 Policy?

    定制 Calico 网络 Policy Calico 默认的 policy 规则是:容器只能与同一个 calico 网络中的容器通信. Calico 能够让用户定义灵活的 policy 规则,精细化控 ...

  9. [easyUI] datagrid 数据格 可以进行分页

    1. 新建一个GridNode的类: public class GridNode { private Long id; private String title;//投票标题 private Inte ...

  10. 7.7 GRASP原则七: 纯虚构 Pure Fabrication

    GRASP原则七: 纯虚构 Pure Fabrication  如果依据信息专家原则获得的解决方案不合适,既不想违反低耦合.高内聚,也不想违 反其他的原则, 该如何把职责分配给对象?  左右为难… ...