tt.display(23); tt.a=9; text1.a=4; tt.b=3; } }
运行结果: static int a=5 int b=6
static display: int b=0 static display: int b=23
6、下面给出了一个矩形类Rectangle,其中含有多个构造方法。上机编译并运行
此程序,观察运行结果,体会其中不同构造方法的设计和使用。 import java.io.*;
class Rectangle //矩形类 {
private int width; //矩形的宽度 private int length; //矩形的长度
Rectangle() //矩形的不带参数的构造函数,缺省的给出长(30)和宽(20) {
length=30;width=20; }
Rectangle(int l,int w) //矩形的带参数的构造函数 {
length=l;width=w; }
Rectangle(Rectangle r) //此构造方法以另一个Rectangle作为参数 {
width=r.width(); //通过对象调用函数并附值给相应变量 length=r.length(); }
int width() //返回宽度 {
return width; }
int length() //返回长度 {
return length; } }
public class CRctngle {
public static void main (String args[ ]) {
Rectangle x1=new Rectangle(); //声明类的对象并实例化 Rectangle x2=new Rectangle(50,40); //声明类的对象并初始化 Rectangle x3=new Rectangle(x1); System.out.println(x1.length()); System.out.println(x1.width()); System.out.println(x2.length()); System.out.println(x2.width()); System.out.println(x3.length()); System.out.println(x3.width()); } }
运行结果:30 20 50 40 30 20
体会:此程序中共定义了3个构造方法:Rectangle()、Rectangle(int l,int w) 、
Rectangle(Rectangle r) ,其中Rectangle()是没有参数的,Rectangle(int l,int w)以常数作为参数,Rectangle(Rectangle r)是以对象最为参数。构造函数的调用实在用new运算符创建类对象是由系统自动完成的,构造函数的参数传递和形实结合也是由系统在调用的同时自动完成。 7、下面给出了一个计算阶乘的类Fact和使用该类计算阶乘的程序Check1。编译并运行该程序,观察运行结果,体会方法的参数的传递和返回值的用法。在调用时改变参数的个数和类型,看看编译时会得到什么信息。 class Fact {
float fact (int n) //定义计算n!的方法 { int i;
float x =1;
for(i=1;i public class Check1 { public static void main (String args[ ]) { Fact x =new Fact( ); System.out.println(x.fact(10)); //计算10! System.out.println(x.fact(15)); //计算15! } } 运行结果: 1.0E9 2.91929271E16 8、编译并运行下面的程序,观察分析运行结果,体会程序中super和this的用法,进一步理解变量隐藏和方法重写的概念。 import java.io.*; class SuperClss //定义父类 { int x; SuperClss( ) //父类的构造方法 { x=10; } void doClss( ) { System.out.println(\ } } class SubClss extends SuperClss //定义子类 { int x; SubClss( ) //子类的构造方法 { super( ) ; x =100; } void doClss( ) //重写父类的doClss方法 //调用父类的构造方法 { System.out.println(\ } void doDemo( ) { int x; x=1000; super.doClss( ); doClss( ); System.out.println(\ System.out.println(\ System.out.println(\ } } public class SuperDemo { public static void main(String args[ ]) { SubClss s = new SubClss(); //演示super和this的方法 //调用父类的doClss方法 //调用本类的doClss方法 //父类的x //本类的x //本方法的x //主方法 s.doDemo(); } } 运行结果: SuperClss.doClass() SubClss.doClss() super.x=10 this.x=100 x=1000 体会:此程序中定义了一个父类,子类SubClss继承了父类SuperClss,在主函数中定义SubClss类对象 s时(即执行语句:SubClss s = new SubClss();时 ),自动调用类SubClss的构造函数SubClss(),再此构造函数中先执行“super( ) ;”语句,这样就调用类SuperClss的构造方法SuperClss( ),因为super来指明超类中的方法。同样在子类方法doDemo( )中,执行语句“super.doClss( );”时,则调用父类的方法doClss( )。如不用super 来指定的话,,则调用的是子类的方法doClss( ),这里子类SubClss()的成员方法doClss( )重写了父类SuperClss( )的成员方法doClss( )。 语句 “System.out.println(\”中super调用的是父类SuperClss的变量x,而语句 “System.out.println(\”中this调用的子类SubClss的变量x, 关键字this和super分别用来指明子类和父类中同名的成员变量。这里父类SuperClss的成员变量x、子类SubClss的成员变量x和类方法doDemo( )中使用的局部变量x三者同名,则要使用关键字this和super来指定所要使用的变量。如不用则输出的类方法的局部变量,如语句“System.out.println(\”输出的就是类方法doDemo()的局部变量。这里子类SubClss()的成员变量x隐藏了父类SuperClss( )的成员变量x。 9、编译并运行下面的程序,分析运行结果,体会其中方法重载的用法,进一步理解方法重载的概念。 class Father //本类中的speak方法重载了两次 { void speak( ) //无参数的speak方法 { System.out.println(″I am Father! ″); 百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库Java程序设计各章习题及其答案(3)在线全文阅读。
相关推荐: