java 如何调用父类的父类

写代码的时候遇到一个问题

想输出的结果:

结果是这样:

子类调用父类的代码用super.方法名

那么子类的子类调用祖父类的方法怎么调用呢

代码如下:

祖父类为 People类 父类为 ChinaPeople类 子类为 BeijingPeople类

祖父类

package taskJuly.day21.task2;

/**
 * @ClassName People
 * @Description TODO
 * @Author Prt
 * @Date 2022/7/21 14:38
 */
public class People {
    String region;
    String hello;
    double height;
    double weight;

    public void speakHello(){
        System.out.println(this.region+" "+this.hello);
    }

    public void averageHeight(){
        System.out.println(this.region+" averageHeight = "+this.height);
    }

    public void averageWeight(){
        System.out.println(this.region+" averageWeight = "+this.weight);
        System.out.println("\r");
    }
}

 父类

package taskJuly.day21.task2;

/**
 * @ClassName ChinaPeople
 * @Description TODO
 * @Author Prt
 * @Date 2022/7/21 14:46
 */
public class ChinaPeople extends People{

    public ChinaPeople() {
       region = "ChinaPeople";
    }

    public void chinaMartial(){
        System.out.println(region+" 太极 very good");
    }


    @Override
    public void speakHello() {
        hello = "说 你好";
        super.speakHello();
    }

    @Override
    public void averageHeight() {
        height = 1.7;
        super.averageHeight();
    }

    @Override
    public void averageWeight() {
        weight = 70.0;
        super.averageWeight();
    }


    public void getFatherHeight(){//此处多写一个方法用到祖父类的方法
        super.averageHeight();    //此处没有Height的数值
    }

    public void getFatherWeight(){//此处多写一个方法用到祖父类的方法
        super.averageWeight();    //此处没有weight的数值
}

 子类

package taskJuly.day21.task2;

/**
 * @ClassName BeijingPeople
 * @Description TODO
 * @Author Prt
 * @Date 2022/7/21 14:52
 */
public class BeijingPeople extends ChinaPeople {

    public BeijingPeople() {
        region = "BeijingPeople";
    }

    public void beijingOpera() {
        System.out.println(region + " very good");
    }

    @Override
    public void speakHello() {

        super.speakHello();
    }

    @Override
    public void averageHeight() {
        height = 1.75;
        super.getFatherHeight();//super.的是父类getFatherHeight而不是averageHeight
    }

    @Override
    public void averageWeight() {
        weight = 73.0;
        super.getFatherWeight();//super.的是父类getFatherWeight而不是averageWeight
    }
}

 测试类

package taskJuly.day21.task2;

/**
 * @ClassName Test
 * @Description TODO
 * @Author Prt
 * @Date 2022/7/21 15:05
 */
public class Test {
    public static void main(String[] args) {
        ChinaPeople chinaPeople = new ChinaPeople();
        chinaPeople.speakHello();
        chinaPeople.chinaMartial();
        chinaPeople.averageHeight();
        chinaPeople.averageWeight();

        AmericanPeople americanPeople = new AmericanPeople();
        americanPeople.speakHello();
        americanPeople.americanBoxing();
        americanPeople.averageHeight();
        americanPeople.averageWeight();

        BeijingPeople beijingPeople = new BeijingPeople();
        beijingPeople.speakHello();
        beijingPeople.beijingOpera();
        beijingPeople.averageHeight();
        beijingPeople.averageWeight();
    }
}

运行结果: 

 

结论:

在父类中多写一个get方法获取到祖父类的方法即可

拓展:

如果是还有更多子类,继续递归写get方法