6.4 习题 1. 创建 一个 名为 Book 的 类, 用来 代表 一 本书。 类 中有 3 个 属性, 分别 是 String 类型 的 bookName, int 类型 的 pageCount 和 double 类型 的 price。 2. 使用 第 1 题中 的 Book 类。 首先 创建 一个 Book 类 的 对象, 然后 给 类 中的 3 个 属性 赋值, 最后 将 Book 类 对象 的 3 个 属性 值 输出 到 控制台。 3. 理解 对象 和 引用 之间 的 关系: 编写 一个 程序, 使用 第 1 题中 的 Book 类。 首先 创建 一个 Book 类 的 对象, 然后 创建 book1 和 book2 两个 Book 类 的 引用, 让 它们 都 指向 创建 出 的 Book 类。 通过 这 两个 引用 修改 Book 对象 的 属性 值, 最后 将 Book 对象 的 属性 值 输出 到 控制台。
Exercise3:
public class exercise3 { public static void main(String[] args) { book newBook = new book(); //创建对象 book book1; book book2; //创建两个引用 book1 = newBook; book2 = book1; //让两个引用都指向Newbook //通过引用修改book的3个属性值 book1.bookName = "the kite scraper"; book1.pageCount= 18; book2.bookPrice = 19.2; System.out.println(newBook.bookName); System.out.println(book1.pageCount); System.out.println(newBook.bookPrice); } }7.12 习题 1. 扩展 第 6 章 习题 中的 Book 类, 给 类 中 添加 两个 构造 方法。 一个 构造 方法 不接受 任何 参数, 给 3 个 属性 赋 初始 值; 另一个 构造 方法 有 3 个 参数, 分别 用 来给 3 个 属性 赋值。 2. 扩展 第 6 章 习题 中的 Book 类, 给 类 中 每个 属性 添加 得到 属性 值 和 设置 属性 值 的 方法。 比如, 对于 bookName() 方法, 应该 添加 一个 getBookName() 方法, 用来 返回 bookName 属 性的 值; 还要 添加 一个 setBookName() 的 方法, 用来 设置 bookName 属 性的 值。 3. 使用 第 2 题中 添加 的 方法, 创建 Book 类 的 对象, 然后 给 Book 类 的 属性 赋值, 最后 将 属性 值 输出 到 控制台。
exercise1
public class book { String bookName; int pageCount; double bookPrice; //添加两个构造方法,一个不接受任何参数,给属性赋初始值 public book(){ bookName = "the kite runner"; pageCount = 10; bookPrice = 55.5; } //另一个接受3个参数,给属性赋值 public book(String setBookName, int setPageCount, double setBookPrice){ bookName = setBookName; pageCount = setPageCount; bookPrice = setBookPrice; } }exercise2
public class book { String bookName; int pageCount; double Price; //添加两个构造方法,一个不接受任何参数,给属性赋初始值 public book() { this("习题集", 30, 50.5); //在一个构造器中调用另外一个构造器,则可以使用this } public book(String bookName, int pageCount, double price) { this.bookName= bookName; this.pageCount = pageCount; this.Price = price; } public String getbookName(){ //添加 一个 getBookName() 方法, 用来 返回 bookName 属 性的 值; return bookName; } public int pageCount(){ //添加 一个 getBookName() 方法, 用来 返回 bookName 属 性的 值; return pageCount; } public double Price(){ //添加 一个 getBookName() 方法, 用来 返回 bookName 属 性的 值; return Price; } public void setbookName(String setbookName){ bookName = setbookName; } public void setpageCount(int setpageCount){ pageCount = setpageCount; } public void setPrice(double setPrice){ Price = setPrice; } }exercise3
public class exercise3 { public static void main(String[] args) { book bookobj = new book(); //创建对象 bookobj.setbookName("This is the bookname"); //给属性赋值,只修改了书名 bookobj.setpageCount(33); bookobj.setPrice(50.6); System.out.println(bookobj.bookName); //输出到控制台 System.out.println(bookobj.pageCount); //输出到控制台 System.out.println(bookobj.Price); //输出到控制台 } }10.7 习题 1. 练习 方法 的 覆盖: 编写 一个 名为 Parent 的 类, 类 中有 一个 叫 method1() 和 一个 叫 method2() 的 方法, 方法 的 内容 就是 将 方法 所属 的 类 和 方法 名 输出 到 控制台。 然后 编写 一个 Child 类 继承 Parent 类, 让 Child 类 覆盖 method1() 方法, 方法 内容 也是 向 控制台 输出 方法 所属 类 和 方 法名。
public class Parent { public void method1() { System.out.println("这是Parent类中的method1方法"); } public void method2() { System.out.println("这是Parent类中的method2方法"); } }Child类已创建,里面分别有method1把父类的method1覆盖了
public class Child extends Parent { //继承parent类,构造方法不会被继承 public void method1() { //覆盖父类的method1 System.out.println("这是Child类中的method1方法"); } }2. 练习 使用 覆盖 的 方法: 编写 一个 静态 方法 invokeMethods, 参数 为 Parent 类 的 引用。 方法 中 首先 使用 instanceof 判断 参数 指向 对象 所属 的 类, 然后 调用 method1() 方法 和 method2() 方法。 然后 编写 一个 程序, 分别 使用 Parent 类 的 实例 和 Child 类 的 实例 为 参数, 调用 invokeMethods() 方法。 import:导入支持类(可以是JDK基础类或者自己编写的类),可以供本类调用方法和属性。
import exercise1.Child; import exercise1.Parent; //导入两个类 public class Exercise2 { public static void main(String[] args) { //然后 编写 一个 程序, //分别 使用 Parent 类 的 实例 和 Child 类 的 实例 为 参数, 调用 invokeMethods() 方法 Exercise2.invokeMethods(new Parent()); Exercise2.invokeMethods(new Child()); } public static void invokeMethods(Parent ref) { //静态方法,参数为parent类的引用 if (ref instanceof Child) { //使用 instanceof 判断 参数 指向 对象 所属 的类 System.out.println("参数指向的是一个Child类的对象"); } else { System.out.println("参数指向的是一个Parent类的对象"); } ref.method1(); ref.method2(); // 然后 调用 method1() 方法 和 method2() 方法 } }3. 在 第 1 题的 基础上, 编写 一个 Child2 类, 覆盖 Parent 类 的 method2() 方法。 然后 编写 一个 程序, 使用 Child2 类 的 实例 调用 invokeMethods() 方法。
public class Child2 extends Parent { public void method2() { System.out.println(“这是Child2类中的method2方法”); } }
import exercise1.Child2; import exercise1.Parent; public class Exercise3 { public static void main(String[] args) { //编写 一个 程序, 使用 Child2 类 的 实例 调用 invokeMethods() 方法。 Exercise3.invokeMethods(new Child2()); } public static void invokeMethods(Parent ref) { if (ref instanceof Child2) { System.out.println("参数指向的是一个Child2类的对象"); } else { System.out.println("参数指向的是一个Parent类的对象"); } ref.method1(); ref.method2(); } }