《JAVA程序设计实训报考.doc》由会员分享,可在线阅读,更多相关《JAVA程序设计实训报考.doc(10页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 实 验 六(一)实验题目:类的封装与继承(二)实验目的:1、理解物理世界和面向对象编程中的封装和继承思想。 2、掌握封装和继承在Java中的语法规则和结论,并灵活运用进行编程。(三)实训案例: 1、private修饰的成员只能在同类的内部被访问;private成员不能被继承。 2、默认访问修饰符的成员只能被同包下的类访问。 3、protected只能修饰成员属性或方法,不能修饰类;protected成员可以被同包下其他类访 问,也可以被不同包下的子类访问。 4、类的继承只允许单继承。 5、构造方法不允许被继承。(四)代码实现: 1、private成员只能在同类的内部被访问: package
2、pgfive;class PrivateTestprivate String s=abc;private void access() System.out.println(s); /从内部访问,合法 public void f1() System.out.println(s); access(); public void f2(PrivateTest t) String ss=t.s; /从内部可以直接访问:t.s System.out.println(ss); public void setS(String ps) s=ps; classT public static void main(S
3、tring args) PrivateTest t = new PrivateTest(); t.f1(); t.s; /从外部访问,非法 t.setS(def); new PrivateTest().f2(t); 2、private成员不能被继承:class A private String s=abc; private void func() System.out.println(This is a private method.); class B extends A public void fB() System.out.println(s); func(); public stati
4、c void main(Stringargs) new B().fB(); 3、编译出错:PrivateInherit.java:10: s 可以在A中访问 privateSystem.out.println(s); PrivateInherit.java:11:找不到符号符号:方法func()位置:类Bfunc(); 2错误从上面的编译错误信息第一行可以推知:A、B类源代码是放在了一个文件PrivateInherit.java中的。(五)实验心得: 通过实验了解到,验证一条结论,有些需要从正反两面来验证。先从同包下的类的来访问,这是允许的,在从异包下的类来访问,这是不允许的。 实 验 七(一
5、)实验题目:类的多态(二)实验目的:1、理解物理世界和面向对象编程中的多态思想。 2、掌握多态在Java中的语法规则和结论,并灵活运用进行编程。(三)实训案例: 1、重载方法对修饰符列表、返回类型是否相同不作要求,区别仅仅在于参数列表。 2、在一个重载方法内可以直接调用另外一个重载方法,但重载的构造方法则不能直接调用, 必须使用this。 3、被覆盖的方法名、返回类型、参数列表必须相同。 4、对覆盖而言,子类方法的访问修饰符=父类方法的访问修饰符。 5、父类中的覆盖方法的修饰符不能是final、static。(四)结论验证:1、结论验证1public class classA public v
6、oid func(int a) /原方法/*下面都是不正确的重载*/public String func(int a)( /返回类型不同return null;) protected void func(int a) /访问修饰符号不同int func(int b) /行参不同,返回类型不同 return 0;/*下面是正确的重载*/void func(long a)private int func(String s)return 0; 编译出错:OverloadModify.java:6:已在A中定义func(int)public String func(int a )/返回类型不同 Ove
7、rloadModify.java:9:已在A中定义func(int)protected void func(int a)/访问修饰符号不同 OverloadModify.java:11:已在A中定义func(int) int func(int b)/行参不同,返回类型不同 3错误2、结论验证2class A void func() func(abc); void func(String s) System.out.println(s); A() A(sss); /把该方法当作非构造方法,即一般的功能方法来调用 /修改方式有两种:定义有关功能方法void A(String s) /或改为这样调用
8、 this.A(sss); A(String s) System.out.println(s); 编译出错:OverloadConstructor.java:10:找不到符号符号: 方法A(java.lang.String)位置: 类AA(sss);1错误3、结论验证3class A String str=A; protected void func(String s) System.out.print(s); System.out.println(t+str); class B extends A String str=B; public void func(String a) System
9、.out.print(a); System.out.println(t+str); public static void main(String a) new B().func(Hello); 其运行正确,输出结果为:Hello B(五)实验心得: 根据本次实验,了解到形参不同,返回类型不同。编译中找不到符号,修改后,仍有点错误。像上例中,A.func()被继承到B中,然后与修改参数后的func()形成重载,而不再是覆盖了。 实 验 八(一)实验题目:接口与抽象类(二)实验目的:1、理解接口与抽象类的思想。 2、掌握掌握接口与抽象类在Java中的语法规则和结论,并灵活运用进行编程。(三)实训案
10、例: 1、接口中的属性默认为static和final,方法默认为abstract。 2、接口中的成员不允许为private,默认为public。 3、接口允许多继承。 4、抽象类中可以没有抽象方法。 5、含有抽象方法的类必须声明为抽象类。 6、抽象类与非抽象类具有相同的继承规则和Java接口实现规则。(四)结论验证:输入程序:public interface IField int t=1;class T implements IField /* public void test() t=10; /若该行可以正确执行,则说明t不被final修饰的 */ public static void ma
11、in(String args) System.out.println(IField.t); /可以直接访问,说明t是被static修饰的 /new T().test() 编译运行正确,说明成员变量t可以直接通过接口名来访问,说明t是被static修饰的。验证结论2给上面程序的属性和方法添加访问修饰符private,再编译,则报错:Imember.java:2: 此处不允许使用修饰符private private int t=1; Imember,java:3: 此处不允许使用修饰符private private String f(); 2错误这说明接口的成员不允许使用private修饰。去掉该
12、程序中的private修饰符,然后添加一个实现类,如下:interface Imember int t=1; String f();class Imember Imp1 implements Imember String f() returnabc; 编译报错:Imember,java:7:ImemberImberImpl中的f()无法实现Imember中的f();String f() 11错误这说明接口的成员方法默认的访问修饰符为public。验证结论3下面来验证结论(3)。输入程序:interface IA void fa(); interface IB void fb(); interf
13、ace IC extends IA,IB/接口间的多继承 void fc();class CA implements IA/一个类实现了一个接口 public void fa() /注意:这里必需使用public System.out.println(IA-CA) class CC implements IA,IB/一个类实现了一个接口 public void fa() System.out.println(IA-CC) public class Iextends/测试 public static void main(Stringargs) new CA().fa(); CC c=new CC
14、(); c.fa(); c.fb(); 编译、运行正确,从而验证了结论3。(五)实验心得: 本次的java实验,注重理解接口与抽象类的思想。在实验中,从而能掌握掌握接口与抽象类在Java中的语法规则和结论,并灵活运用进行编程。 其中接口的运用也有许多的规则,理解抽象类的含义。 实 验 九(一)实验题目: 引用类型的类型转换(二)实验目的:1、结合基本类型的类型转换,掌握引用类型的类型转换规则。 2、综合掌握掌握面向对象程序的设计与实现的思想、方法和步骤。(三)实训案例: 引用类型的类型转换可以概括为: 引用对象的类型转换只允许在具有继承关系(extends)或现实关系 (implement)的
15、类型之间发生,即只允许在该对象及其祖先类型之前进行转 换。因此可以设计接口和类。然后创建C对象,让其在接口IA、IB,类A、B 之间进行转换,这是正确的,而与D类型进行转换则出错。具体如下程序验 证:(四)程序验证:package pgeighit;interface IA public void f();interface IB extends IApublic void g();class A implements IBpublic void print(String s)System.out.println(s);public void f()print (A.f();public vo
16、id g()print (A.g();class B extends Aclass C extends Bpublic void f()print (C.f();public void g()print (C.g();class D extends Apublic void f()print (D.f();public void g()print (D.g();class E extends Cpublic void f()print (D.f();public void g()print (D.g();public class ConvertRefpublic static void mai
17、n(String args)C c=new C();c.f();B b=c;b.f();A a=c;a.f();IB ib=c;ib.f();IA ia=c;ia.f();b=(B)ia;b.f();c=(C) ia;c.f();D d=(D)ia; /错误,因为ia指向的对象是CE e=(E)ia; /错误,因为E is C,但反之不对改程序编译没有问题,但运行有问题: 其中代码:“D d=(D)ia;”错误,因为ia指向的对象是C,C与D是兄弟关系,故不能在他们之间进行类型转换,而代码:“E e=(E)ia; ”虽然C与E具有继承关系,但E不是C的祖先类型,故也不能在他们之间进行类型转换。 (五)实验心得: 引用对象的类型转换的规则即引用对象的类型转换只允许在具有继承关系(extends)或现实关系(implement)的类型之间发生,即只允许在该对象及其祖先类型之前进行转换。在运用引用类型的转换事应当要注意不要犯像上面所展示的错误。
限制150内