类B:
public interface B {
public void methodD();
}
------------------------------------
类A:
public abstract class A implements B{
abstract void methodA();
abstract void methodB();
abstract void methodC();
public void methodD(){
methodC();
methodB();
methodA();
}
}
--------------------------------------
类D:
public class D extends A { void methodA() {
// TODO Auto-generated method stub
System.out.println("方法A");
} void methodB() {
// TODO Auto-generated method stub
System.out.println("方法B");
} void methodC() {
// TODO Auto-generated method stub
System.out.println("方法C");
}}
----------------------------------------
类C:
public class C{
public B methodE(){
B c=new D();
return c;
}
}
这个类到底怎么理解呢?
-------------------------------------
public class Test { /**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub
C d=new C();
B c=d.methodE();
c.methodD();
}}上面类C里的: B c=new D(); 这到底怎么回事呢?不是父类与子类之间才可以这样的吗?现在这样是什么意思呢?

解决方案 »

  1.   

    B   c=new   D(); 
    因为B 是接口,而A实现了接口B,并且D继承了A,也就是说D继承了一个实现类。
    你可以这么理解。
      

  2.   

    你看
    A实现了B,D继承与A
    也就是D继承的是B的一个实现类
    我们看一个层次关系关系
    B b=new A();
    这样可以吧??这样就表示A的层次小于或者等于(这里是小于)B,能理解吧?
    A a=new D();
    这样可以不??这样就表示D的层次小于或者等于(这里是小于)A,能理解不?
    那么,其层次关系就是D小于等于(这里是小于)A小于等于(这里是小于)B,所以
    B c=new D()可以不可以呢??
      

  3.   

    首先你明白了B   c=new   D();  了,B是D的父类,对吧,父类的对象(无论父类是接口还是抽象类,虽然它本身不可以生成对象但)可以引用子类的对象你知道吗,子类的对象不可以引用父类的对象;
    这是典型的向上转型,推荐你看看,Thinking in java 3,搞明白什么可以引用什么,什么是向上转型,这就很简单了!