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. 【Git】Git使用记录: 撤回已经commit到本地的提交记录

    话不多说直接上步骤: git bash直接干到你的code. 直接敲命令: git reset --soft HEAD~1 搞定 就是这么简单粗暴. 如有顾虑请自行找个案例测试即可. 参考资料 htt ...

  2. CSS布局学习(二) - flex属性

    flex属性 定义 flex布局包括最外层的容器和内部的元素,flex属性是内部元素属性.flex属性是flex-grow, flex-shrink, flex-basis三个属性的简写 flex-g ...

  3. JDK下载-安装-配置

    1.JDK的下载 jdk1.8版本   下载地址: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-213 ...

  4. 学习笔记60—SPSS

    一.直方图上显示曲线图:打开SPSS ----> 导入数据 ----> 描述统计 ----> 分析 ----> 频率 ----> 图表 ----> 直方图(勾上在直 ...

  5. js日期的格式化

    我们看控制台打印的关于Date这个类 我们这里可以看到内置方法没有类似format这种方法,所以需要自己定义. 内置的方法: var myDate = new Date();myDate.getYea ...

  6. python非官方模块下载大全

    网址: https://www.lfd.uci.edu/~gohlke/pythonlibs/ 包含了Ta-Lib和PyQt4等模块.

  7. flink入门

    wordCount POM文件需要导入的依赖: <dependency> <groupId>org.apache.flink</groupId> <artif ...

  8. linux存储管理之磁盘配额

    磁盘配额 1  相关命令:quota.quotacheck.edquota.quotaon.quotaoffquota要使用的命令有两种:一种用于查询功能,包括quota.quotacheck.quo ...

  9. 深入理解Plasma(二)Plasma 细节

    这一系列文章将围绕以太坊的二层扩容框架,介绍其基本运行原理,具体操作细节,安全性讨论以及未来研究方向等.本篇文章主要对 Plasma 一些关键操作的细节进行剖析. 在上一篇文章中我们已经理解了什么是 ...

  10. Python 总结一

    '''形式参数不占内存,在调用时开辟内存,在函数结束时释放内存默认参数 调用方式:位置参数.关键字参数 *args (元组) **kwargs(字典) 局部变量:在子程序中使用的变量全局变量:glob ...