面向对象高级编程

  • 格式:doc
  • 大小:33.00 KB
  • 文档页数:5

面向对象高级编程
5.1类的继承
(1)首先预测下列程序的运行结果,然后编译、执行以验证你的预测:
c lass Pet{
protected String name;
public Pet(String n){
name = n;
}
public String getName(){
return name;
}
public String move(){
return "run";
}
public String speak(){
return "";
}
public String toString(){
return "My pet " + name;
}
}
class Dog extends Pet{
protected int weight;
public Dog(String s){
super(s);
}
}
class JLab0501{
public static void main(String[] args){
Pet myPet = new Pet("George");
Dog myDog = new Dog("Spot");
System.out.println(myPet.toString() + "\n" + "Speak: " +
myPet.speak() +"\n" + myPet.move() + " " +
myPet.getName() + "\n");
System.out.println(myDog.toString() + "\n" + "Speak: " +
myDog.speak() +"\n" + myDog.move() + " "
+myDog.getName() + "\n");
}
}
(2)修改Dog类的构造函数,使之可以初始化Dog类中的weight值。

(3)在Dog类中添加方法getWeight以获得其weight值。

(4)修改类JLab0501,使用新的构造函数创建一个名为“snoopy”,重为10的Dog类的对象,并利用其方法输出包括重量在内的各项值(5)要使Dog类对象的speak()方法返回值为“Woof Woof”,应如何做?
修改(1)中程序,并验证你的做法。

5.2方法的重载
(1)首先预测下列程序的运行结果,然后编译、执行以验证你的预测:public class JLab0502 {
public static void test() {
System.out.println("test() invoked");
}
public static int test(int i) {
System.out.println("test(" + i + ") invoked");
return i;
}
public static String test(String s) {
System.out.println("test(" + s + ") invoked");
return s;
}
public static void test(String s, int i) {
System.out.println("test(" + s + ", " + i + ") invoked");
}
public static void test(int i, String s) {
System.out.println("test(" + i + ", " + s + ") invoked");
}
public static void main(String[] args) {
test();
test(100);
test("test");
test("test",100);
test(100,"test");
}
}
(2)在类JLab0502中添加下列方法:
public static int test(int j) {
System.out.println("test(" + j + ") invoked");
return j;
}
编译该程序,观察报错信息,并思考原因。

5.3构造函数的继承与重载
(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方法的最后两行语句删除。

预测修改后程序的运行结果,并进行验证。

5.4抽象类与接口
(1)试改写5.1中的Pet类,其中move与speak方法定义为抽象方法。

定义一个Pet类的子类Cat类。

在Cat类中实现move和Speak方法。

其中move方法返回值为“run”,speak方法返回值为“miao miao”。

(2)编写含有主方法的公共类JLab0504A,在其主方法中创建一个名为myCat
的Cat的实例。

并依照类JLab0501主方法中的相应格式输出结果。

(3)如果将Pet定义为接口,即所有相应方法全部为抽象方法,则Cat类该如何改动?试改写相关代码,并验证你的结果。

5.5包的定义和使用
(1)在C:\javalab目录下新建目录mypg;使用记事本程序编辑下列程序并将其保C:\javalab\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,观察结果并思考原因。

5.6综合实验
定义抽象类Shape表示一般二维图形。

Shape具有抽象方法area和perimeter 分别计算形状的面积和周长。

试定义一些二维形状类(如矩形、三角形、圆形、椭圆形等),这些类均为Shape类的子类。

完成相关类的定义后,定义含有main 方法的类JLab0506来使用这些类的相应对象,输出相关信息:如对象所代表图
形形状、基本数据(半径、长宽高等等)以及面积、周长等计算值。