这样输出结果才是你预想的结果作者: Alex shaw 时间: 2013-3-17 20:22
首先你要明白 A b = new B()创建的是B类的一个对象,真正调用printOut的也是B类的这一个实例对象,所以他会调用B类中的printOut方法。B要输出a的值,他首先看一下自己有没有,如果有的话就用自己的,如果没有就用自己的父类或者自己实现的接口上的(如果有的话), 作者: 范天成 时间: 2013-3-17 20:22
成员变量是看左边,但是你调用的是方法啊,你调用b.a,看看是多少?作者: 沈子豪 时间: 2013-3-17 20:26
interface A
{
int a = 1;
public abstract void printOut();
}
class B implements A
{
int a = 2;
public void printOut()
{
System.out.println(a);
}
}
class DuoTaiDemo
{
public static void main(String[] args)
{
A b =new B();
b.printOut();//这里调用了b的方法,而b里面有该方法,重写了父类的方法,先看子类里面有没有,没有的话再到父类里面找
}
}
给你我之前写过的思路
孔子爹:教书("JavaSE"),40//孔子爹年龄40,教javaSE
孔子:教书("论语"),玩游戏(),20//孔子年龄20,教论语
//有人找孔子爹去教书,结果只有孔子在家,孔子化妆成爹去教
孔子爹 k爹 = new 孔子(); //向上转型 化妆,装爹。
k爹.教书(); //方法重写,孔子只会教论语,所以是论语
sop(k爹.age); //而年龄是化妆出来的,就是父类的年龄是40
//下课了
孔子 k = (孔子)k爹; //向下转型 去妆,还原本身
孔子 k = new 孔子();
k.教书(); //教书还是只能教论语
sop(k.age); //卸过妆之后年龄就是20
k.玩游戏();可以使用自己独有的方法
看懂这个例子以后遇到什么情况都往这个方向走就可以了 作者: 黑马17期-闫东东 时间: 2013-3-17 20:55
interface A