实验报告二
姓名:王**
学号:111100145****
实验题1
[实验要求]
●给以下程序添加输出语句,以显示各种参数值及其传递关系
●画出参数传递的内存图
[实验程序]
源文件: Ex2_1.java
public class Ex2_1 {
public static void main(String[] args)
{
MyDate m1 = new MyDate(1, 9, 1966);
MyDate m2 = m1.addDays(7);
m2.print();
}
}
源文件: MyDate.java
public class MyDate {
private int day = 1;
private int month = 1;
private int year = 2000;
public void print(){
System.out.println( day + "-" + month + "-" + year);
}
public MyDate(int day, int month, int year) {
this.day = day;
this.month = month;
this.year = year;
}
public MyDate(MyDate date) {
this.day = date.day;
this.month = date.month;
this.year = date.year;
}
public MyDate addDays(int date) {
MyDate n= new MyDate(this);
n.day = n.day + date;
return n;
}
}
[运行结果]
[实验结论与收获]
了解了什么是类、类基本格式,对象以及构造方法
实验题2
[实验要求]
●修改程序,使得在子类中可以对两个f分别进行赋值和显示操作
●记录调试过程、步骤、程序和运行结果
[实验程序]
源文件: Child.java
class Parent{
public int f;
public void setF(int a){ f=a; }
public int getF( ) { return f; }
}
public class Child extends Parent{
public int f;
public double d;
public static void main(String [] args){
Child c = new Child();
c.f=100;
c.setF(30);
System.out.println(" Parent: " + c.getF());
System.out.println(" Child: " + c.f);
}
}
[运行结果]
[实验结论与收获]
学会修改程序,分别对F进行赋值和显示操作
实验题3
[实验要求]
●完成程序,使用super创建重写的方法
●调试并记录结果
[实验程序]
源文件:Employee.java
public class Employee {
public String name="zhang";
public double salary=2000;
public String getDetails() {
return " Name:" + name + "\\n" + " Salary:" + salary;
}
}
源文件:Manager.java
public class Manager extends Employee {
public String department="Office";
public String getDetails() {
return super.getDetails() + "\\n" + " Department: " + department;
}
}
源文件:Ex2_3.java
public class Ex2_3{
public static void main(String args[ ]) {
Employee e = new Employee();
Manager m = new Manager();
System.out.println("Employee:"+"\\n" +e.getDetails());
System.out.println("Manager:"+"\\n" +m.getDetails());
}
}
[运行结果]
[实验结论与收获]
学会super的创建使用方法
实验题4
[实验要求]
●修改并完成程序
●说明程序错在哪里,如何修改
●调试并记录结果
[实验程序]
源文件: Ex2_4.java
class Parent {
public void doSomething() { }
}
class Child extends Parent {
public void doSomething() { }
}
public class Ex2_4 {
public static void main() {
Parent p1 = new Parent();
Parent p2 = new Child();
p1.doSomething();
p2.doSomething();
}
}
[运行结果]
[实验结论与收获]
错误出在private void doSomething() { }修改正确的public void doSomething() { }
调试语句public static void main(String args[]) {
实验题5
[实验要求]
●执行程序记录程序结果
[实验程序]
源文件:Ex2_5.java
class Count {
public static int counter;
static {
counter = 100;
System.out.println("in static block!");
}
}
public class Ex2_5 {
public static void main(String[] args) {
System.out.println("counter = "+ Count.counter);
}
}
[运行结果]
[实验结论与收获]
执行程序得到正确结果
实验题6
[实验要求]
●将程序1 Parent类和程序2 Child类存于同一包(目录)中,并调试程序,记录结果。
●将程序1 Parent类存于当前包的子包parent中,程序2 Child类存于当前包中,并调试程序,记录结果。
●比较以上两题结果的不同。
[实验程序]
不同包源文件:Child.java
import aaa.Parent;
public class Child extends Parent{
private int c1 = 21;
public int c2 = 22;
private void cm1(){
System.out.println("in cm1() c1=" + c1);}
public void cm2(){
System.out.println("in cm2() c2=" + c2);}
public static void main(String args[]){
int i;
Parent p = new Parent();
//i = p.f1; p.fm1(); i = p.f2; i = p.f3; p.fm2(); p.fm3();
i = p.f4;
p.fm4();
Child c = new Child();
//i = c.f1; c.fm1(); i = c.f2; c.fm2();
i = c.f3; //protected保护类型的可以使用
i = c.f4;
c.fm3(); //protected保护类型的可以使用
c.fm4();
i = c.c1; i = c.c2;
c.cm1(); c.cm2();
}
}
不同包源文件:Parent.java
package aaa;
public class Parent{
private int f1 = 1;
int f2 = 2;
protected int f3 = 3;
public int f4 = 4;
private void fm1() {
System.out.println("in fm1() f1=" + f1);}
void fm2() {
System.out.println("in fm2() f2=" + f2);}
protected void fm3() {
System.out.println("in fm3() f3=" + f3);}
public void fm4() {
System.out.println("in fm4() f4=" + f4);}
}
同一包源文件:Child.java
public class Child extends Parent{
private int c1 = 21;
public int c2 = 22;
private void cm1(){
System.out.println("in cm1() c1=" + c1);}
public void cm2(){
System.out.println("in cm2() c2=" + c2);}
public static void main(String args[]){
int i;
Parent p = new Parent();
//i = p.f1; p.fm1(); i = c.f1; c.fm1();
i = p.f2; i = p.f3; i = p.f4;
p.fm2(); p.fm3(); p.fm4();
Child c = new Child();
i = c.f2; i = c.f3; i = c.f4;
c.fm2(); c.fm3(); c.fm4();
i = c.c1; i = c.c2;
c.cm1(); c.cm2();
}
}
同一包源文件:Parent.java
public class Child extends Parent{
private int c1 = 21;
public int c2 = 22;
private void cm1(){
System.out.println("in cm1() c1=" + c1);}
public void cm2(){
System.out.println("in cm2() c2=" + c2);}
public static void main(String args[]){
int i;
Parent p = new Parent();
//i = p.f1; p.fm1(); i = c.f1; c.fm1();
i = p.f2; i = p.f3; i = p.f4;
p.fm2(); p.fm3(); p.fm4();
Child c = new Child();
i = c.f2; i = c.f3; i = c.f4;
c.fm2(); c.fm3(); c.fm4();
i = c.c1; i = c.c2;
c.cm1(); c.cm2();
}
}
[实验程序2运行结果]
不同包
同一包
[实验结论与收获]
通过运行结果可以看出:
1、不管是否在同一包中,子类永远不能访问父类的private方法。
2、同一包中,父类与子类都可以访问default方法、protected方法及public方法
3、在不同包中创建的父类对象,不能访问父类的default方法、protected方法、private方法
4、在不同包中创建的子类对象,通过继承,可以访问父类中的protected方法。
掌握了不同包之间,各种方法的访问权限。下载本文