abstract class A{
private int a;
public A(inta){
this.a = a;
}
public void getC(){
return a;
}
public void ddd(){ }
public abstract void ccc();
}
class B extends A{
private int d;
public B(int a, int d){
super(a);
this.d = d;
}
public void ddd(){ }//重写此方法;
public int getD(){
return d;
}
public void ccc(){ }//实现抽象发放;}如果我在main方法里用.A c = new B(); System.out.println(c.getD());行不行.为什么?以上是抽象类,如果我实现的是一个接口,那这样调用方法行不行,为什么.如果是一般的类,我这样调用行吗?因为c不是B类型的而是A类型的,可是A类里面又没有这个方法,虽然我引用了B类,但是不知道能不能调用.请大家指教.
如果在一般类里面,我引用上面的main方法调用一个A类和B类都有的方法行吗?这有是为什么?
private int a;
public A(inta){
this.a = a;
}
public void getC(){
return a;
}
public void ddd(){ }
public abstract void ccc();
}
class B extends A{
private int d;
public B(int a, int d){
super(a);
this.d = d;
}
public void ddd(){ }//重写此方法;
public int getD(){
return d;
}
public void ccc(){ }//实现抽象发放;}如果我在main方法里用.A c = new B(); System.out.println(c.getD());行不行.为什么?以上是抽象类,如果我实现的是一个接口,那这样调用方法行不行,为什么.如果是一般的类,我这样调用行吗?因为c不是B类型的而是A类型的,可是A类里面又没有这个方法,虽然我引用了B类,但是不知道能不能调用.请大家指教.
如果在一般类里面,我引用上面的main方法调用一个A类和B类都有的方法行吗?这有是为什么?
解决方案 »
- 跪求JAVA经典算法与写法。越多越好。
- android-ndk编译生成的so库 可以在java工程中调用么
- mina2 相关问题
- 字符串比较取不同值
- String
- 我来逛逛!
- JDK问题:编译.java文件时为何总报错,不能读文件?
- JCreator LE 3.0的中文支持问题~~~~~~~~~~~~~~~~~
- java 如何调用 COM对象 或WIN API(给提示的有分)
- 这里有青岛的java程序员吗??有几个问题请教一下!(大送分)
- 问个java程序打包问题(在----------------------------线-----------------------------等)
- 分虽然不多,但就这些了,希望大家共同进步
----------------------------------------------------------------------
不行, 现在c是A类型的没有getD()这个方法。
A c = new B(); 只有在B继承或者实现了A的情况下才能这样实例化
System.out.println(c.getD());
行不行.为什么?
----------------------------------
当然不行,因为c是A类型的,而A类中没有getD()这个方法。
但是((B) c).getD()就可以。如果是接口或者一般类,道理是一样的。这是因为编译器只知道c是A类型的。对于ddd()方法,c.ddd()是可以的,但由于c的实际类型是B,所以在heap中对应的方法实现是B的方法,所以真正调用的时候会执行B的ddd()而不是A的ddd(),这才是动态绑定。而getD()是编译都不会通过。