JAVA--继承

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

项目开发遇到一个问题,稀里糊涂给实现了,现在重点讨论一下这是个什么情况,大神们如果看到希望给点指点。

问题:子类与父类具有相同的属性和方法,将子类实例化为父类,调用对应属性的get、set方法,打印出的信息显示了,子类的属性值,请问这是什么原因?

代码如下--父类:

publicclassFreath {PRivateinta =1;publicintgetA() {returna;

}publicvoidsetA(inta) {this.a =a;

}

}

子类A:

publicclassA extends Freath{privateinta =2;publicintgetA() {returna;

}publicvoidsetA(inta) {this.a =a;

}

}

子类B:

publicclassB extends Freath{privateinta =3;publicintgetA() {returna;

}publicvoidsetA(inta) {this.a =a;

}

}

测试类:

publicclassTest {publicstaticvoidmain(String[] args) {

Freath fa=newA();

Freath fb=newB();

System.out.println(fa.getA()+"");

System.out.println(((A) fa).getA()+"");

System.out.println(fb.getA()+"");

System.out.println(((B) fb).getA()+"");

}

}

输出结果:

首先这样的结果,确实是我想要的,不过对于里面的具有逻辑,甚是不解,还望能得到指点。

对于上面的情况我又进行了一下修改,打印出的结果就完全变了:

父类:

publicclassFreath {privateinta =1;publicintgetA() {returna;

}publicvoidsetA(inta) {this.a =a;

}

}

子类A:

publicclassA extends Freath{privateinta =2;//public int getA() {//return a;//}////public void setA(int a) {//this.a = a;//}}

子类B:

publicclassB extends Freath{privateinta =3;//public int getA() {//return a;//}////public void setA(int a) {//this.a = a;//}}

测试类:

publicclassTest {publicstaticvoidmain(String[] args) {

Freath fa=newA();

Freath fb=newB();

System.out.println(fa.getA()+"");

System.out.println(((A) fa).getA()+"");

System.out.println(fb.getA()+"");

System.out.println(((B) fb).getA()+"");

}

}

结果:

对于这两种情况的产生,我的理解是,第一种情况属于:父类的属性是私有的,子类无法继承,父类的属性方法是公开的,子类可以进行继承重写,之所以出现上面的情况,就是父类进行相当于一个提供调用子类方法的入口,子类重写这些方法后,当调用时,便打印出了子类的属性值。第二种情况则是由于父类的属性是私有的,子类无法进行继承,子类继承了父类的方法,但没有进行重写,所以调用时,便将父类的信息打印出来了。

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航