abstract class Tuxing{
public abstract double qiumianji();
}class Tixing extends Tuxing{
double a,b,h;
Tixing(double a,double b,double h){
this.a=a;
this.b=b;
this.h=h;
}
public double qiumianji(){
return ((1/2.0)*(a+b)*h);
}
}class Yuanxing extends Tuxing{
double r;
Yuanxing(double r){
this.r=r;
}
public double qiumianji(){
return (3.14*r*r);
}
}class Dui{
Tuxing di;
double gao;
Dui(Tuxing di,double gao){
this.di=di;
this.gao=gao;
}
void huandi(Tuxing di){
this.di=di;
}
public double qiutiji(){
return (di.qiumianji()*gao)/3.0;
}
}public class Sample4_23{
public static void main(String args[]){
Dui zui;
Tuxing tuxing;
tuxing=new Tixing(2.0,7.0,10.7);
System.out.println("梯形的面积"+tuxing.qiumianji());
zui=new Dui(tuxing,30);
System.out.println("梯形底的堆的体积"+zui.qiutiji());
tuxing=new Yuanxing(10);
System.out.println("半径是10的圆的面积"+tuxing.qiumianji());
zui.huandi(tuxing);
System.out.println("圆形底的堆的体积"+zui.qiutiji());
}
}这是JAVA书中的例题,错当然是没错的,不过有的地方我看不大懂了~~
1.java中A a(A是类,下同),这样算是创建对象吗?还是这样只是声明,创建对象都必须用new运算符创建?
2.c++中的A a是否创建了a对象呢,那用new运算符是否也是创建对象呢?两种创建对象的方法又有什么不同之处啊?
谁能给我列表一下,或具体说明一下JAVA中的和C++中的抽象类的一些知识要点吗?谢谢了。

解决方案 »

  1.   

    Tuxing di
    Tuxing tuxing
    这些是只是声明吗?
      

  2.   

    1.java中A a(A是类,下同),这样算是创建对象吗?还是这样只是声明,创建对象都必须用new运算符创建?
    你的理解是对的
    2. 对C不熟悉,抱歉,不过我觉得和Java八九不离十
    关于抽象类,比较精简的解释是:包含一种或多种抽象方法的类,不需要构造实例。定义抽象类后,其它类可以对它进行扩充并且通过实现其中的抽象方法,使抽象类具体化。
    抽象类与接口的重大区别就在于它能提供一部分实现,包括方法和属性。接口是不可能有属性定义的。
      

  3.   

    困了
    明天帮你想
    今儿先在此拉泡shi,先 --
      

  4.   

    1.java中A a(A是类,下同),这样算是创建对象吗?还是这样只是声明,创建对象都必须用new运算符创建?
    没有创建对象,只声明了A的引用。创建对象都必须用new运算符创建。
    2.c++中的A a是否创建了a对象呢,那用new运算符是否也是创建对象呢?两种创建对象的方法又有什么不同之处啊?
    A a; 创建了一个对象in C++; 它调用的无参数的构造函数(如果有含参构造但没有无参的,会抱错)。不同?你说呢?
      

  5.   

    java中的数据类型分两种基本类型,引用类类型.
    基本类型如,int,byte,等.所有的class,还有数组都是引用类型.
    引用类型必须要new才能产生新对象.所以在java中
    byte a; 声明并建立了一个对象
    myclass a;仅仅是声明了一个对象的引用q,还没有具体的引用对象;//////////////////////////////////////////////////////
    C++中数据类型没有引用和非引用的区别.所以在c++中
    int a;声明并建立了一个对象
    myclass a;声明并建立了一个对象;c++用也有引用一说但和java中的引用不是一个概念, c++中的引用中是一个别名.
    如下
    int a;
    int& b = a;
    那么b就是a的一个别名.
      

  6.   

    《Java与模式》学习笔记(2)——Simple Factory
    http://blog.csdn.net/brooksychen/archive/2007/04/02/1549594.aspx《Java与模式》学习笔记(3)——Factory Method 
    http://blog.csdn.net/brooksychen/archive/2007/04/03/1550388.aspx《Java与模式》学习笔记(4)——Abstract Factory 
    http://blog.csdn.net/brooksychen/archive/2007/04/04/1552143.aspx
      

  7.   

    1.首先说抽象类 
      在原理上java和c++是相同的,就是一个类中有没实现的方法,凡扩展些抽象类的类必须实现
    这些方法。
      抽象类是在接口的基础上来的。一个接口告诉你这个类都有哪些方法,而抽象类是实现了
    其中的一部分方法,目的是提供更好的重用性,直接从抽象类开始,就不用实现接口的所有方法了。
    2.再说说java中引用
      上面已经有人说的很清楚了。java的变量有两种类型(从引用创建方法来说),基本类型和一般的类。基本类型就是byte,char,int,long,float,double这些数字类型,这些类型都是声明时就分配在内存中分配存储空间的,变量实际就是数据在内存中的地址。比如int a;这实际上是在内存中分配了一个32位的空间,并默认初始值为0;
        一般的类是声明的时候,创建一个引用,并未创建对象的实例,这个引用实际是一个32位的数(好象也不太准确,就是32位的内存空间吧),比如A a; a只是一个A类开实例的引用,默认值为null.当A a = new A();时,才把A类的一个实例和a联系起来,有点指针的意思。
      而在c++中,是声明即创建,所谓的创建,就是在内存中给对象分配了空间。.........................................
    还有,建议楼主不要这么对比着学,容易两样都学不好。不如先把一种搞明白了,一类比再学其它的就快了,就好比运动里的参照物一样。你这样好像是再搞相对论。
     
      

  8.   

    Java中 A a;只相当于领到一张白纸,没有什么用的,只有a = new A()时,才会得到一块有用的内存,然后你的这张白纸a上就有了这块内存的地址了。和c++中的指针有点类似(A *pa;)。C++中,A a;就可以得到一块有用的内存,不需要再去new了。这块内存应该是在栈里的,编译时刻就分配的。如果要用new就得这样用:A *pa = new A();是动态分配内存,应该是在运行时刻分配的,在堆中分配的。大概就是这个意思了