Java语言程序设计》
上机实验报告(6)
实验名称: Java面向对象编程 (3)
    级: 软件101               
    名:                
    号:  110029025             
上机时间:                       
              指导教师:                   
实验六  Java面向对象编程 (3)
实验【目的】
1 理解构造函数的继承与重载。
2 抽象类和接口的使用。
3 包的定义与使用。
4 综合运用所学知识编写程序。
实验内容:
1.构造函数的继承与重载。
(1) 首先预测下列程序的运行结果,然后编译、执行以验证你的预测:
public class JLab0503{
            public static void main(String args[]){
        System.out.println("创建父类对象:");
                SuperClass sc0 = new SuperClass();
                System.out.println("\n创建第一个子类对象:");
                  SubClass sc1 = new SubClass();
        System.out.println("\n创建第二个子类对象:");
                SubClass sc2 = new SubClass(1);
    }
}
class SuperClass{
    SuperClass( ){
                System.out.println("父类的构造函数");
      }
}
class SubClass extends SuperClass{
    SubClass( ){
                  System.out.println("子类的第一个构造函数");
    }
        SubClass(int i){
                    System.out.println("子类的第二个构造函数");
            }
}
运行结果:
(2) 去掉SubClass的所有构造函数,然后将JLab0503类中main方法的最后两行语句删除。预测修改后程序的运行结果,并进行验证。
代码: package xuxiaojun;
public class JLab0503 {
    public static void main(String args[]) {
        System.out.println("创建父类对象:");
        SuperClass sc0 = new SuperClass();
        System.out.println("\n创建第一个子类对象:");
        SubClass sc1 = new SubClass();
    }
}
class SuperClass {
    SuperClass() {
        System.out.println("父类的构造函数");
    }
}
class SubClass extends SuperClass {
}
运行结果:
2.抽象类与接口。
1)试改写实验指导手册(5)中第3题的Pet类,其中movespeak方法定义为抽象方法。定义一个Pet类的子类Cat类。在Cat类中实现moveSpeak方法。其中move法返回值为“run”,speak方法返回值为“miao miao
2)编写含有主方法的公共类JLab0504A,在其主方法中创建一个名为myCatCat的实例。并依照实验指导手册(5)中的JLab0501主方法中的相应格式输出结果。
代码: package xuxiaojun;
abstract class Pet {
    protected String name;
    public Pet(String n) {
        name = n;
    }
    public String getName() {
        return name;
    }
    public String toString() {
        return "My pet " + name;
    }
    abstract String move();
    abstract String speak();
}
class Cat extends Pet {
    public Cat(String n) {
        super(n);       
    }
    String move() {       
        return "run";
    }
    String speak() {
        return "miao,miao";
    }
}
public class JLab0504A {
    public static void main(String[] args) {
        Cat myCat = new Cat("Kitty");
       
        System.out.String() + "\n" + "Speak: " +
                myCat.speak() +"\n" + ve() + " " +
                Name() + "\n");
    }
}
运行结果:
(2) 如果将Pet定义为接口,即所有相应方法全部为抽象方法,则Cat类该如何改动?试改写相关代码,并验证你的结果。
代码: package xuxiaojun;
interface Pet1 {
    final String name = " Hello Kitty";
    public abstract String getName();
    public abstract String move();
    public abstract String speak();
    public abstract String toString();
}
class Cat1 implements Pet1{   
    public String getName(){       
        return name;
    }
    public String move(){   
        return "run";
    }
    public String speak(){       
        return "miao,miao";
    }   
    public String toString(){       
        return "My pet" + name;
    }
}
public class JLab0504A2 {
    public static void main(String[] args) {
        Cat1 myCat = new Cat1();
        System.out.String() + "\n" + "Speak: "java程序设计基础视频 +
                myCat.speak() +"\n" + ve() + " " +
                Name() + "\n");
    }
}
运行结果:
3.包的定义和使用。
A.1)在C:\javalab目录下新建目录mypg;使用记事本程序编辑下列程序并将其保C:\jav
alab\mypg\MyPackage.java
package mypg;
public class MyPackage {
            public MyPackage() {
                System.out.println("create MyPackage object");
            }
}
2)编辑下列代码,并将其保存为C:\javalab\JLab0505.java
public class JLab0505 {
          public static void main(String[] args) {
            MyPackage mpg = new MyPackage();
        }
}
(3) 分别编译上述两个java源程序,并执行JLab0505。观察相应结果。
(4)试将C:\javalab\mypg\MyPackage.class文件移动(剪切、粘贴)到C:\javalab\目录下。再次运行JLab0505,观察结果并思考原因。