类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(); 这到底怎么回事呢?不是父类与子类之间才可以这样的吗?现在这样是什么意思呢?
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(); 这到底怎么回事呢?不是父类与子类之间才可以这样的吗?现在这样是什么意思呢?
因为B 是接口,而A实现了接口B,并且D继承了A,也就是说D继承了一个实现类。
你可以这么理解。
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()可以不可以呢??
这是典型的向上转型,推荐你看看,Thinking in java 3,搞明白什么可以引用什么,什么是向上转型,这就很简单了!