运行如下代码: class COne { public void f() { System.out.println("COne.f"); } } class CTwo extends COne{ public void f() { System.out.println("CTwo.f"); } } class CThree { public void g(COne one) { System.out.println("g(Cone)"); one.f(); } public void g(CTwo two) { System.out.println("g(Ctwo)"); two.f(); } } public class Main { public static void main(String[] args) { COne one = new CTwo(); CThree three = new CThree(); three.g(one); } } 控制台输出的结果是( )。 A. g(Cone) CTwo.f B. g(Cone) COne.f C. g(Ctwo) CTwo.f D. g(Ctwo) COne.f
时间: 2023-05-11 15:05:28 浏览: 65
答案是 C. g(Ctwo) CTwo.f。因为在 main 函数中,创建了一个 CTwo 类型的对象 one,并将其赋值给了 COne 类型的变量 one。然后,创建了一个 CThree 类型的对象 three,并调用了它的 g 方法,传入了 one。由于 one 是 CTwo 类型的对象,所以会调用 g(CTwo two) 方法,输出 g(Ctwo) 和 CTwo.f。
相关问题
public class Test { public static void main(String[] args) { Rectangle rectangle = new Rectangle(3.00, 4.00); System.out.println("矩形的长为"+rectangle.length+','+"宽为"+rectangle.wide); System.out.printf("矩形的周长为:%5.2f,面积为:%5.2f",rectangle.perimeter(),rectangle.area()); System.out.println(""); Cone cone = new Cone(rectangle, 3.00,"矩形"); System.out.printf("底面积%5.2f,高为%.2f的%s锥,体积为:%-5.2f",rectangle.area(),cone.height,cone.coneName,cone.V()); Triangle triangle = new Triangle(3.0, 4.0, 5.0); System.out.println("三角形的三边长为:"+triangle.a+'、'+triangle.b+'、'+triangle.c); System.out.printf("三角形的周长为:%5.2f,面积为:%5.2f",triangle.perimeter(),triangle.area()); System.out.println(""); Cone cone1 = new Cone(triangle, 3.00,"三角形"); System.out.printf("底面积%5.2f,高为%.2f的%s锥,体积为:%-5.2f",triangle.area(),cone1.height,cone1.coneName,cone1.V()); Cicle cicle = new Cicle(3.0); System.out.println("圆的半径为:"+cicle.r); System.out.printf("圆的周长为:%5.2f,面积为:%5.2f",cicle.perimeter(),cicle.area()); System.out.println(""); Cone cone2 = new Cone(cicle, 3.00,"圆"); System.out.printf("底面积:%5.2f, 高为%.2f的%s锥, 体积为:%-5.2f", cicle.area(), cone2.height, cone2.coneName, cone2.V()); } }如何修改使用上转型对象
可以使用父类的引用来引用子类对象,这样就可以实现上转型。具体修改如下:
```
public class Test {
public static void main(String[] args) {
Shape shape;
Rectangle rectangle = new Rectangle(3.00, 4.00);
System.out.println("矩形的长为"+rectangle.length+','+"宽为"+rectangle.wide);
System.out.printf("矩形的周长为:%5.2f,面积为:%5.2f",rectangle.perimeter(),rectangle.area());
System.out.println("");
shape = rectangle;
Cone cone = new Cone(shape, 3.00,"矩形");
System.out.printf("底面积%5.2f,高为%.2f的%s锥,体积为:%-5.2f",rectangle.area(),cone.height,cone.coneName,cone.V());
System.out.println("");
Triangle triangle = new Triangle(3.0, 4.0, 5.0);
System.out.println("三角形的三边长为:"+triangle.a+'、'+triangle.b+'、'+triangle.c);
System.out.printf("三角形的周长为:%5.2f,面积为:%5.2f",triangle.perimeter(),triangle.area());
System.out.println("");
shape = triangle;
Cone cone1 = new Cone(shape, 3.00,"三角形");
System.out.printf("底面积%5.2f,高为%.2f的%s锥,体积为:%-5.2f",triangle.area(),cone1.height,cone1.coneName,cone1.V());
System.out.println("");
Cicle cicle = new Cicle(3.0);
System.out.println("圆的半径为:"+cicle.r);
System.out.printf("圆的周长为:%5.2f,面积为:%5.2f",cicle.perimeter(),cicle.area());
System.out.println("");
shape = cicle;
Cone cone2 = new Cone(shape, 3.00,"圆");
System.out.printf("底面积:%5.2f, 高为%.2f的%s锥, 体积为:%-5.2f", cicle.area(), cone2.height, cone2.coneName, cone2.V());
}
}
```
这样就可以通过 `Shape` 类型的引用来引用所有的子类对象,实现了上转型。
Shape shape; //建一个名为rectangle的Rectangle类对象,将长,宽传递给rectangle Rectangle rectangle = new Rectangle(3.00,4.00); System.out.printf("矩形的长为%.2f,矩形的宽为%.2f", rectangle.a, rectangle.b); //换行 System.out.println(""); System.out.printf("矩形的周长为:%5.2f,面积为:%5.2f",rectangle.perimeter(),rectangle.area()); System.out.println(""); shape = rectangle; Cone cone = new Cone(shape,4.00,"矩形"); System.out.printf("底面积%5.2f,高为%.2f的%s锥,体积为:%-5.2f",rectangle.area(),cone.H,cone.Name,cone.V());
这段代码创建了一个矩形对象rectangle,并通过调用Rectangle类的构造函数将长和宽传递给rectangle。然后通过调用rectangle对象的方法计算矩形的周长和面积,并将结果输出到控制台。接着将rectangle对象赋值给了Shape类型的shape变量,这是因为Rectangle类是继承自Shape类的,所以可以将Rectangle类型的对象赋值给Shape类型的变量。然后又创建了一个Cone对象cone,通过传递rectangle对象和高度4.00以及名称"矩形"创建了一个矩形锥,然后通过调用Cone对象的方法计算矩形锥的体积,并将结果输出到控制台。