public interface A{}
public class B implements A{}再写一个类:其中main方法为:
A a=new B();
a.getclass 返回值是A。 既然是A,为何可以调用B的方法?
public class B implements A{}再写一个类:其中main方法为:
A a=new B();
a.getclass 返回值是A。 既然是A,为何可以调用B的方法?
解决方案 »
- struts2的转发页面错误(404)
- 求助 关于JPQL 传IN参数问题
- LoadRunner9怎么用
- HTTP Status 404错误求助
- <html:option> 中value 不能加入"<"
- 用bean连sql server,大家告诉我bean有没有写错
- tomcat控制台不打印后出现的问题
- 初练JSP,刚装了TOMCAT,就遇到一个小问题.为什么TOMCAT的管理页面进不了?
- 再拿出100分javaMail问题
- 查詢大量數據時用循環檢索CMP速度好慢﹐還有速度快一點的方法嗎?高分
- hibernate组件映射是否可以提高性能?
- HibernateXML文件改成注释,最后一个怎么写?
然后,你调用a的方法a.出来的方法都是A里定义好的,不过实现了B里相应的代码
而你的引用a指向的对象是 实例化的是B类,所以执行B的方法了。
灵活性更高,低耦合度。我也是知道这么去用
具体的原理也不大清楚~
A a = new B();
a.getClass() 得到的是B
a 无法调用B中特有的方法和LZ的结论完全相反。
public interface Something { public String printMe();
}public class SomethingImpl implements Something{ @Override
public String printMe() {
// TODO Auto-generated method stub
return "i m implementing Something";
} public String mySpecific() {
return "i m not implementing Something, i m on my own!";
}
}public class SomethingTest { public static void main(String args[]) {
Something a = new SomethingImpl();
System.out.println(a.printMe());
System.out.println(a.getClass().toString());
//无法调用 a.mySpecific()
}
}//执行结果:
// i m implementing Something
// class test.coder.interfacetest.SomethingImpl
java虚拟机会建立一张表,保存引用和方法的映射关系
在运行的时候根据实际情况动态绑定方法
如果 A a= new B(),这里new的是类B,在内存中开辟的B的空间,变量a只是指向这段空间,这是java里多态,所以用a调用实际内存中就是调用了B的方法,a.getClass()得到的也是B类
楼主你可以这样认为
public A getA();这个方法中A可以代表A和A的实现类,当返回值是A的时候A的类型就是A,返回B时A的类型就是B.
父类的引用可以指向子类.
你看
public interface A{}
public class B implements A{}再写一个类:其中main方法为:
A a=new B();
a其实是一个引用变量,它指向的对象是new B();当使用a的时候A就去找到对应的对象.