果为另一个A类的对象(即不破坏实在参数的值)。请在paint()方法中先输出x1、x2的属性值,然后再分别以x1、x2为实在参数调用方法b( ),并输出调用结果,最后再次输出x1、x2的属性值。 @程序
import java.awt.*; import java.applet.*;
public class Applet1 extends Applet { A x1,x2; public void init( ) { x1=new A((short)12,'6'); x2=new A((short)62,(char)65); } public void paint(Graphics g) { A a1=new A((short)0,' '); A a2=new A((short)0,' '); g.drawString(\对象x1的属性值: i=\ ch=\ g.drawString(\对象x1的属性值: i=\ ch=\ a1=b(x1); a2=b(x2);
g.drawString(\以x1为实参调用方法b( ) 生成的新的A类对象的属性值: i=\ +a1.i+\ ch=\ g.drawString(\以x2为实参调用方法b( ) 生成的新的A类对象的属性值: i=\ +a2.i+\ ch=\ g.drawString(\调用后,对象x1的属性值: i=\ ch=\ g.drawString(\调用后,对象x1的属性值: i=\ ch=\ } A b(A y) { A a=new A((short)0,' '); a.i=(short)(y.i+3); a.ch=(char)(y.ch+3); return a; } }
class A { short i; char ch; A(short i1,char c1){ i=i1; ch=c1; } }
2. 请按如下要求定义两个类A和B, 类A中定义一个char类型属性x(将其赋值为65)和一个在小程序窗口中输出x值的方法myPrint()。类B是类A的子类,其中定义一个int 类型属性y(将其赋值为16)和String类型的属性s(将其赋值为“java program!”); 类B中 也定义了一个名为myPrint的方法,其功能为在小程序窗口中输出y和s值;类B中还有一个方法printAll( ),该方法中分别调用父类和子类的myPrint()方法做输出。编写一个Applet,在主类Applet1中创建类B的对象b,调用printAll( )方法输出对象b 的属性值。 @程序
import java.awt.*; import java.applet.*;
public class Applet1 extends Applet
{ B b=new B( ); public void paint(Graphics g) { b.printAll( g); } }
class A { char x=65;
void myPrint(Graphics g) { g.drawString(\} }
class B extends A { int y=16; String s=\ void myPrint(Graphics g) { g.drawString(\ s=\ } void printAll( Graphics g) { super.myPrint(g); myPrint(g); } }
3. 请按如下要求定义两个类A和B, 类A中定义一个方法area(float r), 其返回值类型为float型,该方法的功能是返回半径为r的圆的面积(圆的面积公式为:?r2,其中 r是圆的半径)。类B是类A的子类,其中也定义了一个名为area的方法area(float r),该方法的功能是返回半径为r的球的表面积(球的表面积的计算公式为:4πr2,其中r为球的半径),返回值类型也为float型;在类B中还定义了另一个方法myPrint(float r),功能是分别调用父类和子类的方法area( )计算半径相同的圆的面积和球的表面积并输出调用结果。编写一个Application,创建类B的对象b,在主方法main( )中调用myPrint(float r), 输出半径为1.2的圆的面积和半径为1.2的球的表面积。 @程序
public class Class1 { public static void main (String[] args) { B b=new B( ); b.myPrint(1.2f ); } }
class A {
float rear(float r) { return (float)Math.PI*r*r; } }
class B extends A { float rear(float r) { return 4*(float)Math.PI*r*r; } void myPrint(float r) { System.out.println(\半径为 \的圆的面积=\ +\ 同半径的球的表面积=\
} }
4. 请编写Applet,它由三个类定义组成: 类A中只定义了一个类型为String的对象x和带有一个参数的构造函数(用来初始化x);类B是类A的子类,其中定义了一个int类型的变量x和一个带两个参数的构造函数(用来为父类中的对象x和类B中的变量x做初始化),还定义了一个方法myPrint( ),功能为输出父类A中的x和其子类B 中的x的值;主类Applet1中定义了B类的对象b,请通过创建b为上述两个x赋值(类A中的x的值为“这是父类的x.”, 类B中的x的值为68),通过paint()方法在坐标(20,30)处显示两个x的值。 @程序
import java.awt.*; import java.applet.*;
public class Applet1 extends Applet { } class A {
String x; }
class B extends A { }
5. 请编写Applet,它由三个类定义组成, 类名分别为A、B和Applet1:类A中定义了类型为int的变量i、类型为float的变量f和类型为char的变量ch;类A还定义了三个构造函数,其中,第一个构造函数带有一个int类型的参数(用于初始化i),第二个构造函数带有两个参数(参数类型分别为int和float,用于初始化i和f), 第三个构造函数带有三个参数(参数类型分别为int、float和char,用于初始化i、f和ch)。类B是类A的子类,其中仅定义了一个类型为boolean的变量b和一个带四个参数的构造函数(用来为父类中的变量i、f、ch和本类的变量b做初始化)。主类Applet1中定义了一个初值为32.6的double型变量d和一个B类的对象b,请通过创建b为上述i、f、ch和b赋值(i的值为50,f的值为7.2,ch的值为’h’,b的值为true),用paint()方法在(10,30)位置处显示i,f,ch,b,d的值。
int x;
B(String x1,int x2){ super(x1); x=x2; void myPrint(Graphics g) {
g.drawString(\父类A中x的值=\ 子类B中x的值=\ }
}
A(String x1){
x=x1;
}
B b=new B(\这是父类的x.\public void paint(Graphics g) {
b.myPrint(g);
}
@程序
import java.awt.*; import java.applet.*;
public class Applet1 extends Applet { double d=32.6; B b=new B(50,7.2f,'h',true ); public void paint(Graphics g) { g.drawString(\ f=\ ch=\ b=\ d=\ } }
class A {
int i; float f; char ch; A(int x){ i=x; } A(int x,float y){ this(x); f=y; }
A(int x,float y,char z){ this(x,y); ch=z; } }
class B extends A { boolean b; B(int x,float y,char z,boolean w){ super(x,y,z); b=w; } }
练习6(5)
掌握:接口、抽象类、最终类的编程;字符串的使用。
1. 定义接口A,接口内有两个方法: method1(int x)和method2(int x,int y),它们的返回值类型均为int。请编写一个Applet,并使其实现接口A:令方法method1(int x)的功能是求5的x次方、方法method2(int x,int y) 的功能是求两参数的最大值。在paint()方法中调用这两个方法,显示method1(2)和 method2(2,8)的结果。 @程序
import java.awt.*; import java.applet.*;
public class Applet1 extends Applet implements A { public void paint(Graphics g) { g.drawString(\调用method1(2)的结果: \ g.drawString(\调用method2(2,8)的结果: \
} public int method1(int x) { int result=1; for(int i=1;i<=x;i++) result*=5; return result; } public int method2(int x,int y) { return x>y?x:y; } }
interface A { public abstract int method1(int x); public abstract int method2(int x,int y); }
2. 定义名为VolumeArea的抽象类,在其中定义圆周率?的值为3.14159,并定义两个抽象方法volume(double r)和area(double r),它们的返回值类型均为float。再定义以类VolumeArea为父类的子类VolumeAndArea,在该子类中实现父类中的抽象方法:方法volume(double r) 的功能是求半径为r的球的体积(公式为:4?r3?3);方法area(double r)的功能是求半径为r的圆的面积(公式为:?r2)。请编写一个Application ,在其主类中定义一个VolumeAndArea类的对象x,通过对象x求半径为r(r的值由命令行给定)的球的体积及该球最大切面的圆的面积,并输出计算结果。 @程序
public class Class1 {
static VolumeAndArea x=new VolumeAndArea( ); public static void main(String[ ] args) {
float r=Float.valueOf(args[0]).floatValue( );
System.out.println(\半径为\的球的体积=\ System.out.println(\半径为\的圆的面积=\ } }
abstract class VolumeArea {
static final float myPI=3.14159f;
public abstract float volume(double r); public abstract float area(double r); }
class VolumeAndArea extends VolumeArea {
public float volume(double r) {
return (float)(4*myPI*r*r*r/3); }