本帖最后由 hfq01 于 2010-12-02 12:05:46 编辑

解决方案 »

  1.   


    现有一个类C ,如果实现里面的jia() 和 jian()功能 ???你这里说是"实现",用C类继承A和B如果"实现"改成“拥有”那也可以用组合public class C
      private Class B;
      private Class A;
      

  2.   

    我想着不可能啊,java中有单继承限制的!
      

  3.   

    最重要的是类C必须即是A类型也是B类型 ,就是说我在new C类的对象的时候即是A类型也是B类型对象 。
    这个在java里是没法做到的,java是单继承
      

  4.   

    LZ绝望吧,在JAVA里面是不可能做到你要的要求的,多重继承在语法上就已经被JAVA给干掉了
    除非你搞成接口
      

  5.   

    单继承的java不具备这种方案。
    但是如果仅仅 是为了调用 A,B的方法,直接 new出对象调用不就可以了?
    LZ最好把需求写清楚,目前 没有遇到java实现不了的业务,只是难度而已。如果发现java做不到,那只能说明,你的设计本身就有问题。
      

  6.   

    你的意思很明显啊 就是想多继承啊 java不支持
      

  7.   

    //第1个类:
    public class A{
      public void jia(){}
    }//第2个类:
    public class B{
      public void jian(){}
    }//第3个类:
    public class C{
      private A a;
      private B b;
      public C(A a, B b){
        this.a=a;this.b=b;
      }
      public void jia(){
        a.jia();
      }
      public void jian(){
        b.jian();
      }
    }
      

  8.   

    Java课第一课就说了 java不支持多重继承 内部类可以实现你要的功能 接口也可以实现你的功能
      

  9.   

    在13楼的基础上。再添加一个ICalc接口,把A中和B中所有的方法都映射进去,然后由C实现ICalc.这样就使得C必须实现所有方法。
    如下:public class A {
    public void jia(){
    System.out.println("A.jia()");
    }
    }public class B {
    public void jian(){
    System.out.println("B.jian()");
    }
    }public interface ICalc {
    public void jia();
    public void jian();
    }public class C implements ICalc{
    private A a;
    private B b;

    public C(A a, B b){
    this.a=a;
    this.b=b;
    }

    public void jia(){
    a.jia();
    }

    public void jian(){
    b.jian();
    }
    }public class Test { public static void main(String[] args) {
    A a=new A();
    B b=new B();
    ICalc c=new C(a,b);
    c.jia();
    c.jian();
    }
    }
      

  10.   

    哦。 这时候建议把C改为:public class C implements ICalc{
            //建议A和B对象不在其他地方创建,直接由类C初始化完成。
    private A a=new A();
    private B b=new B();

    public void jia() {
    a.jia();
    } public void jian() {
    b.jian();
    }
    }
      

  11.   

    //在java里面没有多继承他是通过多接口来实现多继承的
    //但是多接口这里有一个设计上的问题,两个接口里面不能有重复的方法函数。
    public interface A{
      public void jia(){}
    }public interface B{
      public void jian(){}
    }public class C implements A,B{  public void jia(){}  public void jian(){}
    }
      

  12.   

    说那么多干嘛  
    楼主就是想实现多继承 上面的代码我还是觉得不符合要求 比如我这样在
    public class Test {    public static void main(String[] args) {
            A a=new A();
            B b=new B();
            ICalc c=new C(a,b);
            c.jia();
            c.jian();
        }
    }
    这个里面加上一句话
    c=(C)a;那么是用javac是编译不过的   java规定 在编译器只要是父类 同类型 和子类的强制转换都是可以通过的
    但是这里就不能通过   说明即不是父类  也不是同类型  也不是子类型  你这里只是把楼主的思想实现了一遍  但是没有达到
    重要的是类C必须即是A类型也是B类型 ,就是说我在new C类的对象的时候即是A类型也是B类型对象 
    这个要求   所以我觉得 任凭大家想破脑袋也不可能达到楼主的要求   鉴定完毕
      

  13.   

    在java里面  编译期的强制转换和运行期的强制转换是不一样的 运行期间子类转换成父类是不成功的    但是编译期却是可以的
      

  14.   


    第1个类:
    public class A{
      public void jia(){}
    }第2个类:
    public class B{
      public void jian(){}
    }第3个类:
    public class C{
     //定义A、B类的对象,并传入C的构造方法,让C即符合了A、B
      A a;
      B b;
      C(A a,B b){
        this.a = a;
        this.b = b;
       }  public void jia(){
         a.jia();
       }  public void jian(){
         b.jian();
       }
    }不知道有没有错,没检查,也不知道这个到底符合你的意思么。。
      

  15.   

    最重要的是类C必须即是A类型也是B类型 ,就是说我在new C类的对象的时候即是A类型也是B类型对象
    不可能
      

  16.   

    问题是我C类既要有A类的方法又要有B类的方法,最重要的是C类要做为参数传递给其他的类调用,并且该C类可能是做为A类类型进行传递的,也有需求做为B类类型进行传递的。
      

  17.   

    Java语法当中,不允许多继承。
    楼主的问题,目前无法解决。
      

  18.   

    class C{
       A a;
       B b;
    }当需要把c当作A来使用时,只要使用 c.a即可。同理,用c.b作为B的实例来执行功能
      

  19.   


    class A{
        void a(){System.out.println("A.a()");}
    }
    class B{
        void b(){System.out.println("B.b()");}
    }
    class C{
        A a;
        B b;
        
        C(A a,B b){
    this.a = a;
    this.b = b;
        }
        
        C(){
    this(new A(),new B());
        }
        
        A asA(){
    return a;
        }
        
        B asB(){
    return b;
        }
        public static void main(String[] args){
    //虽然C既不继承A,也不继承B,但是可以通过C的方法asA获得等效的A的实例,以调用A类的方法。
    //同理可以获得对应的B的实例已调用B类的方法
    //感觉上,C同时继承了A和B,既是A又是B
    //其实,既不是A也不是B,但是同时可以做所有A,B可以做的事
    C c = new C();
    c.asA().a();
    c.asB().b();
        }
    }
      

  20.   

    最重要的是类C必须即是A类型也是B类型 
    楼主你这句话本身就不对,有没有动物既是猫又是狗的?没有吧要达到楼主的要求只有聚合,但是类C还是类C,永远不会是类A或者类B
      

  21.   

    package oo;public class A {
    public void a() {
    System.out.println("A.a()");
    }
    }--------
    package oo;class B {
    public void b() {
    System.out.println("B.b()");
    }
    }
    ---------
    package oo;class C {
    A a;
    B b; C(A a, B b) {
    this.a = a;
    this.b = b;
    } C() {
    this(new A(), new B());
    } public A asA() {
    return a;
    } public B asB() {
    return b;
    }}
    -------------
    package oo;public class D { public void callCasA(C asA){
    asA.asA().a();
    }

    public void callCasB(C asB){
    asB.asB().b();
    }}
    ------------
    package oo;public class Test { public static void main(String[] args) {
    D d = new D();
    C casA = new C();
    d.callCasA(casA);

    C casB = new C();
    d.callCasB(casB);
    }}
    ==================
    以上的代码实现了楼主的愿望。
    第1个类:
    public class A{
      public void jia(){}
    }第2个类:
    public class B{
      public void jian(){}
    }上面两个类不能动,任何单词都不能改动。就是说不能继承其他的类,不能实现其他的接口,不能进行方法添加,删除等任何操作 。
    现有一个类C ,如果实现里面的jia() 和 jian()功能 ???
    最重要的是类C必须即是A类型也是B类型 ,就是说我在new C类的对象的时候即是A类型也是B类型对象 。
      

  22.   


    class A{
    public void jia(){System.out.println("class A");}
    }
    class B{
    public void jian(){System.out.println("class B");}
    }
    public class First {
    public static void main(String ds[]){
    A a=new A();
    a.jia();
    B b=new B();
    b.jian();
    }
    }这样符合你的要求吗?