class Animal{
int height=40,weight;
void eat(){
System.out.println("animal eat");
}
void sleep(){
System.out.println("animal sleep");
}
void breathe(){
System.out.println("animal breathe");
}
}
class Fish extends Animal{
int height=30;
void breathe(){
super.height=50;
super.breathe();
System.out.println(super.height);
System.out.println("fish breathe");
}
}
class AA{
public static void main(String args[]){
Animal an=new Animal();
Fish fi=new Fish();
//an.breathe();
// fi.weight=30; fi.breathe();
System.out.println(an.height);
}
}
有个地方不明白了class Fish extends Animal{
int height=30;
void breathe(){
super.height=50;
super.breathe();
System.out.println(super.height);
System.out.println("fish breathe");
}
}这段里面在breathe()方法里我调用父类的height并修改为50然后用super.height打印出来是50,这样我是否已经修改了父类的height变量值为50呢?在AA类里打印父类的哪个height值为40也就是没有修改,这个原因是变量生命周期问题么?在我那方法里即使调用父类的height并赋值为50但是一出breathe这个方法后就失效了?
int height=40,weight;
void eat(){
System.out.println("animal eat");
}
void sleep(){
System.out.println("animal sleep");
}
void breathe(){
System.out.println("animal breathe");
}
}
class Fish extends Animal{
int height=30;
void breathe(){
super.height=50;
super.breathe();
System.out.println(super.height);
System.out.println("fish breathe");
}
}
class AA{
public static void main(String args[]){
Animal an=new Animal();
Fish fi=new Fish();
//an.breathe();
// fi.weight=30; fi.breathe();
System.out.println(an.height);
}
}
有个地方不明白了class Fish extends Animal{
int height=30;
void breathe(){
super.height=50;
super.breathe();
System.out.println(super.height);
System.out.println("fish breathe");
}
}这段里面在breathe()方法里我调用父类的height并修改为50然后用super.height打印出来是50,这样我是否已经修改了父类的height变量值为50呢?在AA类里打印父类的哪个height值为40也就是没有修改,这个原因是变量生命周期问题么?在我那方法里即使调用父类的height并赋值为50但是一出breathe这个方法后就失效了?
你要知道的是,子类创建对象时,也在其中创建了父类的一个对象。你的super就是指向这个在子类中的父类这个对象。
然后你创建了一个Fish fi=new Fish();对象,这个时候fi的对象在没执行super.height=50;
这个的时候hieght还是40,执行吼fi对象的height是50,注意an对象的height还是40
最后你答应的是an的height。
public static void main(String args[]){
Animal an=new Animal();
Fish fi=new Fish();
fi.breathe();
System.out.println(an.height);
}
在main方法里程序先创建了一个父类对象,然后又创建了一个子类对象然后调用子类的breathe()方法在此方法里用super调用父类的成员变量并传值为50然后打印父类的高也就是传进去的50到这里没有错误,下面重新回到main方法里执行输出语句System.out.println(an.height);用父类对象调用他的高,值就为40了,这里难道我没改变父类成员变量的值么?还是成员变量在每个对象里都有一份拷贝我修改的只是子类创建的哪个父类对象的值?而真正父类自己创建的哪个an对象值始终没有变过?各位大哥....这里不明白帮忙讲讲....
Fish fi2 = new Fish();
fi.breathe();
System.out.println(fi.height);
fi2.height = 50;
fi = fi2;
System.out.println(fi.height);第二次输出fi.height,就变成50了,这个就是引用传递