小豪先生吧 关注:56贴子:96,095

回复:【神经病研究所】Java oop

只看楼主收藏回复

1.3.3 构造方法重载
构造方法重载是方法重载的一个典型特例。
【例9】
****************************************
      AccpTeacher7类
****************************************
01 package s2Java.sg.ch01;
02 public class AccpTeacher7 {
03   private String name;        // 教员姓名
04   private String school = "北京中心";// 所在中心
05
06   public AccpTeacher7(String name) {
07     super();
08     this.name = name;       // 设定教员姓名
09   }
10
11   public AccpTeacher7(String name, String school) {
12     super();
13     this.name = name;       // 设定教员姓名
14     this.school = school;     // 设定教员的所在中心
15   }
16
17   public String introduction() {
18     return "大家好!我是" + school + "的" + name;
19   }
20 }
****************************************
     AccpTeacher7Test类
****************************************
01 package s2Java.sg.ch01;
02 public class AccpTeacher7Test {
03   public static void main(String[] args) {
04     AccpTeacher7 teacher1 = new AccpTeacher7("李芳");
05     System.out.println(teacher1.introduction());
06     AccpTeacher7 teacher2 = new AccpTeacher7("张欣","天津中心");
07     System.out.println(teacher2.introduction());
08   }
09 }
运行结果:
大家好!我是北京中心的李芳
大家好!我是天津中心的张欣
【分析】
通过重载构造方法来表达对象的多种初始化行为。也就是说,在通过new语句创建一个对象时,可以实现
在不同条件下,让不同的对象具有不同的初始化行为。


IP属地:广东16楼2013-04-25 10:49
回复
    【现场编程】
    编写一个类Book3,代表教材:
    (1)具有属性:名称(title)、页数(pageNum)、类型(type)。
    (2)具有方法:detail,用来在控制台输出每本教材的名称、页数、类型。
    (3)具有两个带参构造方法:
        第一个构造方法中,设置教材类型为“计算机”(固定),其余属性的值由参数给定。
        第二个构造方法中,所有属性的值都由参数给定。
    编写测试类Book3Test进行测试:
    分别以两种方式完成对两个Book3对象的初始化工作,并分别调用它们的detail方法,看看输出是否正确。
    【代码】
    ****************************************
            Book2类
    ****************************************
    01 package s2Java.sg.ch01.exercise;
    02 public class Book3 {
    03   private String title;
    04   private int pageNum;
    05   private String type;
    06
    07   public Book3(String title,int pageNum){
    08     this.title = title;
    09     this.pageNum = pageNum;
    10     this.type = "计算机";
    11   }
    12
    13   public Book3(String title,int pageNum,String type){
    14     this.title = title;
    15     this.pageNum = pageNum;
    16     this.type = type;
    17   }
    18
    19   public void detail(){
    20     System.out.println("书名:" + title + ",页数:" + pageNum +
    21               ",类型:" + type);
    22   }
    23 }
    ****************************************
           Book2Test类
    ****************************************
    01 package s2Java.sg.ch01.exercise;
    02 public class Book3Test {
    03   public static void main(String[] args) {
    04     Book3 book1 = new Book3("Java入门",270);
    05     Book3 book2 = new Book3("北京生活指南",570,"生活");
    06     book1.detail();
    07     book2.detail();
    08   }
    09 }
    运行结果:
    书名:Java入门,页数:270,类型:计算机
    书名:北京生活指南,页数:570,类型:生活


    IP属地:广东17楼2013-04-25 10:49
    回复
      【练习】
      一、选择题:
      1.给定如下Java代码,下列(  )方法可以加入到Sample类中,并且能够编译正确。(选两项)
      01 public class Sample {
      02   public int getSomeshing(int d) {
      03     return d;
      04   }
      05 }
      A. private int getSomestring(int i,String s) {}
      B. public void getSomestring(int i) {}
      C. private void getSomestring(byte b) {return b;}
      D. public double getSomething() {return 2;}
      【答案】CD
      【分析】考察的知识点是“方法重载”。A选项需要返回一个int类型的值,方法体错误。
          B选项与题干中的代码方法名一样(不是方法重载),编译报错。


      IP属地:广东19楼2013-04-25 10:50
      回复
        2.给定如下Java代码,编译运行后,结果将是(  )。
        01 public class Sample {
        02   private int x;
        03
        04   public Sample() {
        05     x = 1;
        06   }
        07
        08   public void Sample(double f) {
        09     this.x = (int)f;
        10   }
        11
        12   public int getX() {
        13     return x;
        14   }
        15
        16   public static void main(String[] args) {
        17    Sample s = new Sample(5.2);
        18    System.out.println(s.getX());
        19   }
        20 }
        A. 发生编译期错误,编译器提示:出现重复的方法Sample
        B. 发生编译期错误,编译器提示:未定义构造方法Sample(double)
        C. 正常运行,输出结果:5.2
        D. 正常运行:输出结果:5
        【答案】B
        【分析】17行出错了,只有无参的构造方法,没有含参的构造方法。


        IP属地:广东20楼2013-04-25 10:50
        回复
          3.给定如下Java代码,编译运行后,将会输出(  )结果。
          01 public class Sample {
          02   public double result(double d1,double d2) {
          03     return d1 < d2 ? d1 : d2;
          04   }
          05
          06   public double result(int d1,double d2) {
          07     return d1 > d2 ? d1 : d2;
          08   }
          09
          10   public int result(int d1,int d2) {
          11     return d1 - d2;
          12   }
          13
          14   private int result(int i) {
          15     Sample s = new Sample();
          16     System.out,print(s.result(2,3.0) + ",");
          17     System.out,print(s.result(4.0,4.5) + ",");
          18     System.out,print(s.result(10,9));
          19   }
          20 }
          A. 3.0,4.0,1
          B. 2,4.0,1
          C. 3.0,4.5,1
          D. -1,4.0,1
          【答案】A
          【分析】考察的知识点是“方法重载”、“三元?表达式”。
              程序运行到16行,调用第6行的方法。即:2 > 3.0 吗?结果为False,所以输出“3.0”。
          程序运行到17行,调用第2行的方法。即:4.0 < 4.5 吗?结果为True,所以输出“4.0”。
              程序运行到18行,调用第10行的方法。即:10 - 9 等于几?所以输出“1”。


          IP属地:广东21楼2013-04-25 10:50
          回复
            二、简答题、编程题:
            1.请指出下面代码中存在的错误,并说明错误原因。
            01 class Teacher1 {
            02   public Techer1() {} // ①与类名不一致,应为Teacher1,而不是Techer1
            03 }
            04
            05 class Teacher2 {
            06   public void Teacher2(String name) {} // ②不是构造方法,应该去掉void
            07 }
            08
            09 public class TeacherTest {
            10   public static void main(String[] args) {
            11     Teacher1 t1 = new Teacher1();
            12     Teacher2 t2 = new Teacher2("Mr lee");
            13   }
            14 }


            IP属地:广东23楼2013-04-25 10:51
            回复
              2.请编码实现需求:
              编写一个类Student1,代表学员,要求:
              (1)具有属性:姓名、年龄,其中年龄不能小于16岁,否则输出错误信息。
              (2)具有方法:自我介绍,负责输出该学员的姓名、年龄。
              编写测试类Student1Test进行测试,看是否符合要求。
              【代码】
              ****************************************
                     Student1类
              ****************************************
              01 package s2Java.sg.ch01.homework;
              02 public class Student1 {
              03   private String name;// 姓名
              04   private int age; //年龄
              05
              06   public String getName() {
              07     return name;
              08   }
              09
              10   public void setName(String name) {
              11     this.name = name;
              12   }
              13
              14   public int getAge() {
              15     return age;
              16   }
              17
              18   public void setAge(int age) {
              19     if (age < 16){
              20       System.out.println("错误!您还不符合最小年龄要求!");
              21     }
              22     this.age = age;
              23   }
              24
              25   /**
              26    * 返回自我介绍的内容
              27    */
              28   public String introduction() {
              29     return "大家好!我是" + name + ",我今年" + age + "岁。";
              30   }
              31 }
              ****************************************
                    Student1Test类
              ****************************************
              01 package s2Java.sg.ch01.homework;
              02 public class Student1Test {
              03   public static void main(String[] args) {
              04     Student1 student = new Student1();
              05     student.setName("张三");
              06     student.setAge(10);
              07     System.out.println(student.introduction());
              08   }
              09 }
              运行结果:
              错误!您还不符合最小年龄要求!
              大家好!我是张三,我今年10岁。


              IP属地:广东24楼2013-04-25 10:51
              回复
                4.请编码实现需求:
                编写一个类Student2,代表学员,要求:
                (1)具有属性:姓名、年龄、性别、专业。
                (2)具有方法:自我介绍,负责输出该学员的姓名、年龄、性别以及专业。
                (3)具有两个带参数的构造方法:
                    第一个构造方法中,设置学员的性别为男、专业为ACCP,其余属性的值由参数给定。
                    第二个构造方法中,所有属性的值都有参数给定。
                编写测试类Student2进行测试,分别以两种方式完成对两个Student2对象的初始化工作,并分
                别调用它们的自我介绍方法,看看输出是否正确。
                【代码】
                ****************************************
                       Student2类
                ****************************************
                01 package s2Java.sg.ch01.homework;
                02 public class Student2 {
                03   private String name;
                04   private int age;
                05   private String sex;
                06   private String subject;
                07
                08   public Student2(String name,int age) {
                09     this.name = name;
                10     this.age = age;
                11     this.sex = "男";
                12     this.subject = "ACCP";
                13   }
                14
                15   public Student2(String name,int age,String sex, String subject){
                16     this.name = name;
                17     this.age = age;
                18     this.sex = sex;
                19     this.subject = subject;
                20   }
                21
                22   public String introduction() {
                23     return "大家好!我是" + name + ",我今年" + age + "岁,性别是" +
                24         sex + ",专业是" + subject;
                25   }
                26 }
                ****************************************
                      Student2Test类
                ****************************************
                01 package s2Java.sg.ch01.homework;
                02 public class Student2Test {
                03   public static void main(String[] args) {
                04     Student2 s1 = new Student2("张三",20);
                05     Student2 s2 = new Student2("李兰",22,"女","BENET");
                06     System.out.println(s1.introduction());
                07     System.out.println(s2.introduction());
                08   }
                09 }
                运行结果:
                大家好!我是张三,我今年20岁,性别是男,专业是ACCP
                大家好!我是李兰,我今年22岁,性别是女,专业是BENET


                IP属地:广东26楼2013-04-25 10:52
                回复
                  —————————————————————————————————————————
                  ╭═┐╭═┐╭═┐╭═┐ ╭═┐╭═┐╭═┐╭═┐
                  ║转║║帖║║完║║毕║ ║欢║║迎║║留║║言║
                  └═╯└═╯└═╯└═╯ └═╯└═╯└═╯└═╯
                  —————————————————————————————————————————


                  IP属地:广东27楼2013-04-25 10:52
                  回复
                    欢迎您来到宠物店!请输入要领养宠物的名字:@口口村
                    请选择要领养的宠物类型:(1、狗狗 2、企鹅)2
                    请选择企鹅的性别:(1、Q仔 2、Q妹)2
                    宠物的自白:我的名字叫@口口村,健康值是100,和主人的亲密度是0,性别是 Q妹。


                    IP属地:广东28楼2013-04-25 10:56
                    回复