关于大花猫的问题,不好意思麻烦大家了,又有新发现!!!!!!!!!!
cxz7531(大花猫) ( ) 信誉:97 Blog 加为好友 2007-04-12 16:14:54 得分: 0
这样改下
public class aa {
public int num = 1;
public static void main(String... strings) {
bb p = new bb();
System.out.println( "num= " + ((aa) p).num);
System.out.println( "num= " + p.num);
}
}
class bb extends aa {
public int num = 8;
public static void main(String args[]) {
bb t = new bb();
System.out.println(t.num);
}
}
//结果是
num=1
num=8
事实证明大花猫是正确的,利用了 "子类可以转化为父类 "的特性:
下面的这个程序是我写的,也能证明 "子类可以转化为父类 "可以在子类中方便的选择
输出父类的变量,但是问题随之又来了,难道方法不可以利用 "子类可以转化为父类 "的特性吗:如下:
class Father {
public int num = 1;
public void tellASecret() {
System.out.println( "Father 's secret. ");
}
}
class Son extends Father {
public String num = "hello ";
public static void main(String[] args) {
Son son = new Son();
son.tellASecret();
((Father)son).tellASecret();
}
public void tellASecret() {
System.out.println( "Son 's secret. ");
}
}
我的目的是输出:
Son 's secret.
Father 's secret.
而结果却输出了:
Son 's secret.
Son 's secret.
不知道这是为什么,如果JAVA规定不允许这样使用的话,你倒可以报错啊,
但是也不报错,.请问如何解决?
------解决方案--------------------Java中public、protected方法是会被子类覆盖,属性才不会的
Son 中的tellASecret已经重载了Father 中的方法,在Son类之外你已经无法调用了Father 中的tellASecret方法
------解决方案--------------------class Father {
public int num = 1;
public void tellASecret() {
System.out.println( "Father 's secret. ");
}
}
class Son extends Father {
public String num = "hello ";
public static void main(String[] args) {
Son son = new Son();
Father mo=new Father();
son.tellASecret();
mo.tellASecret();
}
public void tellASecret() {
System.out.println( "Son 's secret. ");
}
}
在Son类里面可以用Father来实例方法,这应该可以达到你要的效果
------解决方案--------------------既然通过实例一个子类对象就可以调用子类方法,楼主为什么还要通过将子类引用转化为超类引用这种方式呢,实在费解!