java实验报告类构造函数与继承

课程名称:   Java程序设计                     成绩评定:       

实验项目名称:实验5:类构造函数与继承        指导教师:  

学生姓名:             学号:                 专业班级:

实验项目类型: 基础     实验地点:            验时间:

一、实验目的与要求:

    1、理解类和对象的区别,掌握构造函数的使用,熟悉通过对象名引用实例的方法和属性,进一步掌握方法调用时参数的传递;

2、掌握package、jar打包功能与应用;

4、掌握类的继承,理解继承中的覆盖现象.

二、实验内容:

1、按照要求完成程序

public class Test{

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("子类的第二个构造函数");

}

}

要求:1)运行程序写出结果;

创建父类对象:

父类的构造函数

创建第一个子类对象:

父类的构造函数

子类的第一个构造函数

创建第二个子类对象:

父类的构造函数

子类的第二个构造函数

2)去掉SubClass的所有构造函数,然后将Test类中main方法的最后两行语句删除。预测修改后程序的运行结果,并进行验证。

创建父类对象:

父类的构造函数

创建第一个子类对象:

父类的构造函数

2、  首先预测下列程序的运行结果,然后编译、执行以验证你的预测:

class 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);}}

public class PetTest{

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");}}

输出:

My pet George

Speak:

run George

My pet Spot

Speak:

run Spot

1)      修改Dog类的构造函数,使之可以初始化Dog类中的weight值。

class Dog extends Pet{

protected int weight;

public Dog(String s,int weight){

super(s);

this.weight=weight;

}

Dog myDog = new Dog("Spot",20);

输出:

My pet George

Speak:

run George

My pet Spot

Speak:

run Spot

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

public int getWeight(){

   return this.weight;

}

输出:

My pet George

Speak:

run George

My pet Spot

Speak:

run Spot

3)        修改类PetTest,使用新的构造函数创建一个名为“snoopy”,重为10 的Dog类的对象,并利用其方法输出包括重量在内的各项值。

       代码:Dog snoopy = new Dog("Snoopy",10);

  System.out.println(snoopy.toString() + "\n" + "Speak: " + snoopy.speak() +"\n" + snoopy.move() + " " +snoopy.getName() + "\n"+"它的重量是:"+snoopy.getWeight()+"\n");

4)      要使Dog类对象的speak()方法返回值为“Woof Woof”,应如何做?修改(1)中程序,并验证你的做法。

  代码:public Dog(String s,int weight,String speak){

super(s);

this.weight=weight;

this.speak=speak;}

3、  按照要求完成程序:

1)        第一个类是图形类(Shape),含有一个成员变量color(字符串类型),一个没有参数的构造方法,以及一个有一个字符串类型参数的构造方法来初始化颜色变量,还有一个返回颜色变量值的成员方法show,以及一个抽象方法getArea获取面积,返回值为double类型;

2)        第二个类是圆形类(Circle)继承自图形类,含有一个成员变量半径r,有一个有两个参数的构造方法,来初始化颜色和半径,一个方法getArea,返回值为double,获取圆的面积值。

3)        第三个类是矩形类(Rectangle)继承自图形,含有两个double类型的成员变量长a和宽b,有一个有三个参数的构造方法,来初始化颜色、长和宽,一个方法getArea,返回值为double,获取矩形的面积值。

4)        第四个类是测试类(TestShape),分别定义圆形类和矩形类的实例对象,并用show方法,getArea方法来测试自己的定义

abstract class Shape{

String color;

public Shape (){

}

public Shape(String color){

super();

this.color=color;}

public String showColor(){

return color;

}

public abstract double getArea();

}

class Circle extends Shape{

private int r;

public Circle(String color,int r){

super();

this.color=color;

this.r=r;}

public double getArea(){

return 3.14*r*r;}

}

class Rectangle extends Shape{

private double a;

private double b;

public Rectangle( String color ,double a,double b){

super();

this.color=color;

this.a=a;

this.b=b;}

public double getArea(){

return a*b;}

}

public class TestShape{

  public static void mian(String[] args){

        Circle t1=new Circle("红",5);

       Rectangle t2=new Rectangle("蓝",8,4);

       System.out.println("该圆的颜色为:"+t1.showColor()+", "+"面积为:"+t1.getArea());

       System.out.println("该矩形面积为:"+t2.getArea());}

       }

4Java包的实践

修改第3题的Java程序,利用package关键字、jar命令将上述四个类打包为一个为名为Shapes4.jar包文件。

   在源程序前加package shapes4;

   

三、实验体会:

1、对抽象方法和抽象类的定义和使用还不是很清楚,不知道如何重写抽象方法的。

2、定义为public或者不定义的影响不知道,为什么类定义为public类时编译会出错,不定义时不会出现同样的错误。类中的对象的定义为public或者private的区别,以及对后续函数的影响不是很清楚。

3、编写时会出现一些细节性的错误,不过经过调试基本可以解决,如:输出语句没写对,少打了一个大括号等。

4、最后一个Shape、 TestShape等类的编写题目执行时出错,不知道怎么解决。

  

5、打包类,之前按照书上写语句总是不对,后来老师讲过之后知道了是路径的问题。

6、要多自己上机做实验。

 

第二篇:Java继承时构造函数的调用

?class Person { private String name=""; private int age=0;Java 继承时构造函数的调用public Person() { System.out.println("person 无参数构造函数"); }public Person(String name,int age) { this.name=name; this.age=age; System.out.println("person 2 参数的构造函数"); } } class Student extends Person { private String school; private String grade;public Student() { System.out.println("student 无参数的构造函数"); }public Student(String name ,int age,String school) { System.out.println("student 3 参数的构造函数"); } public { super(name,age); this.school=school; this.grade=grade; System.out.println("student 4 参数的构造函数,super()."); } } Student(String name ,int age,String school,String grade)

class Test { public static void main(String [] args) { System.out.println("st1:"); Student st2=new Student(); System.out.println("---------------------------");System.out.println("st2:"); Student st=new Student("zhangshan",76,"武大"); System.out.println("---------------------------");System.out.println("st3:"); Student st3=new Student("lisi",24,"武大","研究生");} }/* ======================================= 输出如下:E:\JavaWork>java Test st1: person 无参数构造函数 student 无参数的构造函数 --------------------------st2: person 无参数构造函数 student 3 参数的构造函数 --------------------------st3: person 2 参数的构造函数 student 4 参数的构造函数,super(). **************************************说明了创建一个子类的对象实例的时候, 必先调用父类的无参数的构造函数 (默认构 造函数) 假如父类有带参数的构造函数, , 那么系统将不会给它创建无参数的构造函数, 这时,子类在实例化的时候,因为找不到父类的默认构造函数,编译器将会报错,但如

Java继承时构造函数的调用

相关推荐