java继承中的一个小问题
首先代码贴出来
public class TestExtends {
public static void main(String[] args) {
new Person().printPerson();
new Student().printPerson();
}
}
class Student extends Person {
private String getInfo() {
return "Student";
}
}
class Person {
private String getInfo() {
return "Person";
}
public void printPerson() {
System.out.println(getInfo());
}
}
student继承了person类,private不能访问,但是printPerson是public的,是可以访问的,但是它里面调用了person里的private的方法,这种情况,结果是两个person,等于还是去调用了父类person里的private的getInfo方法。
这里有点不明白,为什么不是去掉子类中的重写的getInfo()方法呢?
------解决方案--------------------student类没有printPerson()方法,所以调用父类的,父类怎么调用子类的方法?
------解决方案--------------------private修饰的方法只能在类内部访问,不会被子类继承或者被创建的对象调用
------解决方案--------------------
class Person {
private String getInfo()
{
return "Person";
}
public void printPerson()
{
System.out.println(
this.getInfo());
}
实际上父类中调用的是当前的getInfo方法。而这个方法子类中有,但是由于是私有的并没有被继承下去。
这就相当于调用的是this.getInfo();
------解决方案--------------------你犯了一个错误,我按逻辑来给你分析一下,先诞生了父类,按照前面说的那个例子,父类里面有两个方法,如果把getInfo()方法去掉,那么是不是应该在printPerson()中调用getInfo()方法的时候应该说明调用的是那个类里面的getInfo()方法。以此来推算,父类里面有这个方法那么就会调用父类里面的方法。如果没有就会报错,所以父类不会调用子类里面的方法,原因就是父类先诞生的,子类后诞生的。在构造父类的时候怎么能提前调用子类的方法呢?
------解决方案--------------------public class TestExtends
{
public static void main(String[] args)
{
System.out.println("1-------------1");
//通过new父类实例化后,调用了printPerson();
//而printPerson(); 里面又调用了 getInfo()方法
//所以输出肯定是Student
new Person().printPerson();
System.out.println("2-------------2");
//通过new子类实例化后,Student是Person的子类,所以
//Student类会继承父类除private修饰的关键字外的属性和方法
//调用了printPerson(),调用的这个方法是子类从父类继承而来的,
//但是父类的这个方法在输出时,又会调用父类本身的这个 getInfo()
new Student().printPerson();
System.out.println("3--------------3");
}
}
class Student extends Person
{
private String getInfo()
{
return "Student";
}
}
class Person {