请教个问题,Java中属性的隐藏与方法的覆盖,求详解. 50

先看一个程序publicclassRunTime{publicstaticvoidmain(String[]args){Animala=newCat();System.o... 先看一个程序
public class RunTime {

public static void main(String[] args) {
Animal a = new Cat();
System.out.println(a.A);
System.out.println(a.b);
a.voice();
a.method();

}

}
class Dog extends Animal {
public int b = 3;
public static int A = 3;
public static void method(){
System.out.println("狗");
}
public void voice() {
System.out.println("狗叫");
}
}

class Cat extends Animal {
public int b = 4;
public static int A = 4;
public static void method(){
System.out.println("猫");
}
public void voice() {
System.out.println("猫叫");
}
}

class Animal {
public int b = 0;
public static int A = 0;
public static void method(){
System.out.println("动物");
}
public void voice() {
System.out.println("动物叫");
}
}

运行输出结果是:
0
0
猫叫
动物

我想问下为什么会输出这个结果, 为什么不是下面的输出呢?

4
4
猫叫


求详解答。。。谢谢!!
展开
 我来答
历盆郁7
2013-01-18 · TA获得超过4277个赞
知道大有可为答主
回答量:1795
采纳率:100%
帮助的人:968万
展开全部
首先要知道这几点
1.只有注入到内存的属性和方法,才能被使用.(这是本类的,如果是其他类,还得考虑安全级别,如:public protected private等)

2.静态方法和静态属性 不依赖于 对象的创建(new) 即:在对象创建之前,只要应用程序启动,就注入内存.
你可以直接调用,如:可以直接使用Animal.A Animal.method(),而且:
a.A <==> Animal.A
a.method() <==> Animal.method()

3.非静态程序块, 即 成员变量,成员方法, 要依赖于 对象的创建,只有 创建了这个的对象,才给这个对象分配内存,注入内存,你才能使用它

4.Animal a = new Cat(); 即: 父类 对象 = new 子类
左边的是句柄, 指向的是子类的对象,由于你创建的是子类的对象,而且子类也覆盖了父类的方法和属性(非静态),所以
a.voice(); 所以执行的是子类的方法.
shxuen
2013-01-18 · TA获得超过116个赞
知道小有建树答主
回答量:158
采纳率:0%
帮助的人:124万
展开全部
成员变量是没法继承的,而方法可以继承。
首先a对象是Animal类的对象,所以两个变量的输出的是Animal类的成员变量。其中a.A,调用的静态方法所以a.A和Animal.A是一样的。而且Animal.A更为标准。
再看方法。由于method类是静态方法,所以a.method就是Animal.method;而voice方法在Cat类中被覆写,所以调用Cat类中的方法,如果要访问父类Animal的voice方法应该用super关键字调用。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
shuzui2100
2013-01-18 · 超过21用户采纳过TA的回答
知道答主
回答量:139
采纳率:0%
帮助的人:66.1万
展开全部
变量可以继承。
但方法就不同了,只因为他是属于一个类的,不需要被实例化,才称之为static方法.
也是因为他是属于一个类的.子类不能覆盖static方法,在调用的时候也是调用父类的static的方法.
呵呵.看你的理解了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-01-18
展开全部
在子类继承父类时,形构相同(返回值,方法名,参数都相同)的方法会被覆盖。 但这是有前提的,他针对的是实例方法,像static这样的方法就不能被”覆盖“。

也就是
public static int A = 0;
public static void method(){
System.out.println("动物");
}
A属性和 method 均是静态的不可以被覆盖
而 public void voice() 方法 则被覆盖了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-01-18
展开全部
如果印 Cat.b 就是4
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式