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

最新文章

  1. 你知不知道 Cookie正在泄露你的隐私!
  2. 64位Win7下安装与配置PHP环境【Apache+PHP+MySQL】
  3. Linux匿名管道与命名管道
  4. shell脚本调试技术_转
  5. Android白天/夜间模式Day/Night Mode标准原生SDK实现
  6. UML类图细节
  7. studio设置File Templates
  8. [转]使用Subversion进行版本控制
  9. windows 自动贴边
  10. Activity 与 Task
  11. (转)ASP.NET MVC 第五个预览版和表单提交场景
  12. splash渲染网页
  13. Github上star和fork比较高的vim配置方案
  14. Java注解(Annotation)用法:利用注解和反射机制指定列名导出数据库数据
  15. Java代理全攻略【有瑕疵:字节码生成部分没看到,最后两节没仔细看,累了】
  16. c#解析Lrc歌词文件
  17. 阅读基于sketch的软件定义网络测量数据平面硬件模型
  18. 编写Makefile规则
  19. 「Django」rest_framework学习系列-API访问跨域问题
  20. libc、glibc与gcc

热门文章

  1. 使用C#加密及解密字符串
  2. 改写element-ui中的日期组件
  3. please select android sdk(出现小红叉)
  4. 『TensorFlow』梯度优化相关
  5. Android测试(三)——APK文件反编译
  6. flask项目部署
  7. YII实现restful,postman进行接口测试
  8. 皮质学习 HTM 知多少
  9. 洛谷 P2661信息传递
  10. oracle中日期类型 to_date 和to_timestamp什么区别啊?