//第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(); } }
Java课第一课就说了 java不支持多重继承 内部类可以实现你要的功能 接口也可以实现你的功能
在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(); } }
哦。 这时候建议把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(); } }
//在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(){} }
说那么多干嘛 楼主就是想实现多继承 上面的代码我还是觉得不符合要求 比如我这样在 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类型对象 这个要求 所以我觉得 任凭大家想破脑袋也不可能达到楼主的要求 鉴定完毕
第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(); } }不知道有没有错,没检查,也不知道这个到底符合你的意思么。。
class C{ A a; B b; }当需要把c当作A来使用时,只要使用 c.a即可。同理,用c.b作为B的实例来执行功能
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(); } }
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类型对象 。
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(); } }这样符合你的要求吗?
现有一个类C ,如果实现里面的jia() 和 jian()功能 ???你这里说是"实现",用C类继承A和B如果"实现"改成“拥有”那也可以用组合public class C
private Class B;
private Class A;
这个在java里是没法做到的,java是单继承
除非你搞成接口
但是如果仅仅 是为了调用 A,B的方法,直接 new出对象调用不就可以了?
LZ最好把需求写清楚,目前 没有遇到java实现不了的业务,只是难度而已。如果发现java做不到,那只能说明,你的设计本身就有问题。
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();
}
}
如下: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();
}
}
//建议A和B对象不在其他地方创建,直接由类C初始化完成。
private A a=new A();
private B b=new B();
public void jia() {
a.jia();
} public void jian() {
b.jian();
}
}
//但是多接口这里有一个设计上的问题,两个接口里面不能有重复的方法函数。
public interface A{
public void jia(){}
}public interface B{
public void jian(){}
}public class C implements A,B{ public void jia(){} public void 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();
}
}
这个里面加上一句话
c=(C)a;那么是用javac是编译不过的 java规定 在编译器只要是父类 同类型 和子类的强制转换都是可以通过的
但是这里就不能通过 说明即不是父类 也不是同类型 也不是子类型 你这里只是把楼主的思想实现了一遍 但是没有达到
最重要的是类C必须即是A类型也是B类型 ,就是说我在new C类的对象的时候即是A类型也是B类型对象
这个要求 所以我觉得 任凭大家想破脑袋也不可能达到楼主的要求 鉴定完毕
第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();
}
}不知道有没有错,没检查,也不知道这个到底符合你的意思么。。
不可能
楼主的问题,目前无法解决。
A a;
B b;
}当需要把c当作A来使用时,只要使用 c.a即可。同理,用c.b作为B的实例来执行功能
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();
}
}
楼主你这句话本身就不对,有没有动物既是猫又是狗的?没有吧要达到楼主的要求只有聚合,但是类C还是类C,永远不会是类A或者类B
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类型对象 。
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();
}
}这样符合你的要求吗?