日期:2014-05-20  浏览次数:20760 次

一个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);  

}

------其他解决方案--------------------
我里个去! 类能嵌套类吗?