读书人

一个java的小疑点刚刚学java不久问

发布时间: 2012-12-22 12:05:07 作者: rapoo

一个java的小问题,刚刚学java不久,问的问题可能有点白痴,各位帮帮忙

public class Circle {
private int radius;
public Circle(int r){
radius=r;
}
public double getArea(){
return Math.PI*Math.pow(radius, 2);
}
public class Cylinder {
private Circle circle;
private int height;
public Cylinder(int r,int h){
Circle circle=new Circle(r);
height=h;
}
public double getVolume(){
return Math.PI*Math.pow(radius, 2)*height;
}
}
}


public class Test {
public static void main(String[] args) {
Cylinder c1=new Cylinder(5,5);//为什么这样不行??
System.out.println();
}
}

[最优解释]
建议楼主在Cylinder里给circle赋值时,不要再定义了,即把:

Circle circle=new Circle(r);

改成:
circle=new Circle(r);

否则,类里定义的
private Circle circle;

就不会赋值了,这个circle 不是构造函数里的那个circle!
[其他解释]
楼上正解,实例化内部类要这样写:
Circle c =new Circle();
Circle.Cylinder cy=c.new Cylinder(5,5);
当然把Cylinder声明为static也可以,不过需要顺便把radius也声明为static就行。
[其他解释]
引用:
引用:
楼上正解,实例化内部类要这样写:
Circle c =new Circle();
Circle.Cylinder cy=c.new Cylinder(5,5);
当然把Cylinder声明为static也可以,不过需要顺便把radius也声明为static就行。
我试了下,还是不行,在Circle c =new Circle();报错了,Cir……

对你的代码是有参数的,我拿来实验的时候顺手改了下构造函数,这个无关紧要的啊,你加个参数就行。
[其他解释]
Cylinder是个非静态的内部类
改成public static class Cylinder
[其他解释]
引用:
Cylinder是个非静态的内部类
改成public static class Cylinder

如果这样的话那在Cylinder类中的radius不是不能用private了??
但是类中的变量是要private封装的吧
[其他解释]
引用:
楼上正解,实例化内部类要这样写:
Circle c =new Circle();
Circle.Cylinder cy=c.new Cylinder(5,5);
当然把Cylinder声明为static也可以,不过需要顺便把radius也声明为static就行。

我试了下,还是不行,在Circle c =new Circle();报错了,Circle类中构造方法Circle是有参数的吧
[其他解释]

package com.briup.test08;

public class Test {
public static void main(String[] args) {
//Cylinder c1=new Cylinder(5,5););//为什么这样不行??
//是可以的,改成下面这样就行了
Circle c =new Circle(5);
Circle.Cylinder cy=c.new Cylinder(5,5);
}
}

[其他解释]
我里个去! 类能嵌套类吗?


[其他解释]
你必须先声明外面这个类的对象,才能生成里面这个类的对象啊,Circle c =new Circle();或者为这个类增加个无参数构造器
[其他解释]
java的内部类创建对象的话,必须先创建外部类对象,然后外部类点取内部类对象。

读书人网 >J2SE开发

热点推荐