实训 5 面向对象编程练习 实训 5 面向对象编程练习 5.1 实训目的 通过编程和上机实验理解 Java 语言是如何体现面向对象编程基本思想 以及如何创建类 和对象 了解成员变量和成员方法的特性 5.2 实训要求 编写一个体现面向对象思想的程序 编写一个创建对象和使用对象的方法的程序 5.3 实训内容 5.3.1 创建对象并使用对象 1 定义一个 Person 类 可以在应用程序中使用该类 成员属性 Person 类的属性 变量 姓名 name 字符串类型 String 性别 sex 字符型 char 年龄 age 整型 int 3 个构造函数 public Person(String s) //设置姓名 public Person(String s,char c) //调用本类的构造函数 Person(String s) 设置性别 public Person(String s,char c,int i) //调用本类的构造函数 Person(String s,char c) 设置年龄 一个成员方法 public String tostring() //获得姓名 性别和年龄 利用定义的 Person 类 请实例化对象 输出下面结果
24 Java 程序设计实训指导 姓名 : 张三性别 : 男年龄 :21 把下面程序补充完整, 并调试通过写出结果 public class Person private String name; private char sex; private int age; public Person( ) name = ; public Person(String s, ) name = s; sex = ; public Person(String s,char c, ) name = s; sex = c; age = ; public String tostring() if((sex=='m') (sex=='m')) " 姓名 :"+name+" 性别 : 男 "+" 年龄 :"+age; else if((sex== 'W') (sex=='w')) return " 姓名 :"+name+" 性别 : 女 "+" 年龄 :"+age; else return " 性别有误!"; public static void main(string[] args) p1= Person(" 张三 ",'M',21); System.out.println(p1. ); 图 5-1 是程序输出结果 图 5-1 person 类运行结果 (2) 当参数为对象时, 传递的方式为引用传递, 运行下面程序, 运行结果如图 5-2 所示 class Test int a,b; Test(int i,int j) a=i; b=j;
实训 5 面向对象编程练习 25 // 传递一个对象 void method(test ob) ob.a = ob.a+10; ob.b = ob.b-10; public class CallByReference public static void main(string args[]) Test object = new Test(25,30); System.out.println(" 调用前 object.a 和 object.b 的值 :" + object.a + " " + object.b); object.method(object); System.out.println(" 调用后 object.a 和 object.b 的值 :" + object.a + " " + object.b); 图 5-2 CallByReference 运行结果 5.3.2 静态变量 程序功能 : 通过两个类说明静态变量 / 方法与实例变量 / 方法的区别 程序源代码如下 class StaticDemo static int x; int y; public static int getx() return x; public static void setx(int newx) x = newx; public int gety() return y; public void sety(int newy) y = newy; public class KY3_4
26 Java 程序设计实训指导 public static void main(string[] args) System.out.println(" 静态变量 x="+staticdemo.getx()); System.out.println(" 实例变量 y="+staticdemo.gety()); // 非法, 编译时将出错 StaticDemo a= new StaticDemo(); StaticDemo b= new StaticDemo(); a.setx(1); a.sety(2); b.setx(3); b.sety(4); System.out.println(" 静态变量 a.x="+a.getx()); System.out.println(" 实例变量 a.y="+a.gety()); System.out.println(" 静态变量 b.x="+b.getx()); System.out.println(" 实例变量 b.y="+b.gety()); 对上面的源程序进行编译, 排错并运行, 结果如图 5-3 所示 图 5-3 KY3_4 运行结果 5.3.3 类的封装 下面程序通过类中的方法来实现对私有变量的操作, 补充完整并调试写出结果 class Test1 int a; public int b; private int c; void setc(int i) ; int getc() ; class Test2 public static void main(string args[]) object = new Test1(); object.a = 10;
实训 5 面向对象编程练习 27 object.b = 20; object. (100); System.out.println("a,b,and c: " + object.a + " " +object.b + " " + object. ); 5.4 拓展训练 1. 编写一个矩形类 Rect, 包含 : 两个 protected 属性 : 矩形的宽 width; 矩形的高 height 两个构造器方法 : (1) 一个带有两个参数的构造器方法, 用于将 width 和 height 属性初始化 (2) 一个不带参数的构造器方法, 将矩形初始化为宽和高都为 10 两个方法 : (1) 求矩形面积的方法 area() (2) 求矩形周长的方法 perimeter() 把程序补充完整, 调试通过 public class Rect protected float width, height; public Rect() width=0; height=0; public Rect(float width, float height) =width; =height; public float area() return ; public float perimeter() return ; public static void main(string args[]) Rect r1=rect(4.5f,6.2f); System.out.println(" 面积为 :"+r1. ); System.out.println(" 周长为 :"+r1. );
28 Java 程序设计实训指导 2. 编写一个完整的 Java Application 程序 包含类 Student 和 TestStudent, 具体要求如下 : (1)Student 类 : 1 属性 : name:string 对象, 表示姓名 sex:char 类型, 表示性别 id:long 类型, 表示学号 classinfo:string 对象, 表示班级 address:string 对象, 表示家庭地址 2 方法 : Student (String name, char sex, long id): 构造函数 String getname(): 返回姓名 void setid(long id): 设置学号 void setaddress(string add): 设置家庭地址 void setclass(string classinfo): 设置班级信息 public String tostring(): 返回学生的各项信息, 包括姓名 性别等上述属性 (2) 类 TestStudent 作为主类要完成测试功能 : 1 用以下信息生成一个 Student 对象 agirl: 姓名 : 杨阳 性别 : 女 学号 : 1234567 2 设置家庭地址 : 浙江杭州教工路 42 号 ; 设置班级信息 :2004 计算机 1 班 3 输出对象 agirl 的各项信息 : 把下面程序补充完整, 调试通过 public class Student String name; char sex; long id; String classinfo; String address; public Student(String name,char sex,long id) = name; =sex; =id; public String getname() return ; public void setid(long id) =id;
实训 5 面向对象编程练习 29 public void setaddress(string add) =add; public void setclass(string classinfo) =classinfo; public String tostring() return " 姓名 :"+name+" 性别 :"+sex+" 学号 :"+id+" 班级信息 :"+classinfo+" 庭地址 :"+address; class TestStudent public static void main(string[] args) Student agirl=new Student(" 杨阳 ",' 女 ',1234567); agirl. (" 浙江杭州教工路 42 号 "); agirl. ("2004 计算机 1 班 "); System.out.println(aGirl. ); 家