You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java分层继承中跨子类调用方法报错求助

Java继承代码报错问题修复

我创建了14个类,其中a1为父类,a2、b1、c1直接继承自a1;a3、a4继承自a2;a5继承自a3;a6、a7、a8继承自a4;b2、b3继承自b1;c2、c3继承自c1。父类a1中初始化了多个int类型变量,a2、b1、c1中声明了n9变量。

需求是:

  • 使用a3子类调用a5中定义的add5方法
  • 使用a4调用a6、a7、a8中分别定义的add6、add7、add8方法

但运行代码时出现无法解决的报错,以下是原代码:

class a1{

    int n1=80,n2=70,n3=60,n4=50,n5=40,n6=30,n7=20,n8=10;
}

class a2 extends a1{

    int n9;
}


class a3 extends a2{

    add5();
}


class a4 extends a2{
    add6();
    add7();
    add8();
}


class a5 extends a3{

    public void add5(){

        n9=n1+n2+n3+n4+n5;
        System.out.println("sum is : "+n9);
    }
}


class a6 extends a4{

    public void add6(){

        n9=n1+n2+n3+n4+n5+n6;
        System.out.println("sum is : "+n9);
    }
}


class a7 extends a4{

    public void add7(){

        n9=n1+n2+n3+n4+n5+n6+n7;
        System.out.println("sum is : "+n9);
    }
}


class a8 extends a4{

    public void add8(){

        n9=n1+n2+n3+n4+n5+n6+n7+n8;
        System.out.println("sum is : "+n9);
    }
}


class b1 extends a1{
    int n9;

}


class b2 extends b1{

    public void sub2(){

        n9=n1-n2-n3;
        System.out.println("subtraction is : "+n9);
    }
}


class b3 extends b1{

    public void sub3(){

        n9=n1-n2-n3-n4;
        System.out.println("subtraction is : "+n9);
    }
}


class c1 extends a1{
    int n9;

}


class c2 extends c1{

    public void mul2(){

        n9=n1*n2*n3;
        System.out.println("multi is : "+n9);
    }
}


class c3 extends c1{

    public void mul3(){

        n9=n1*n2*n3*n4;
        System.out.println("multi is : "+n9);
    }
}

class hei{
    public static void main(String[] args) {
        a8 obj1= new a8();
        obj1.add8();    
    }
}

错误分析

  1. 语法错误:a3和a4类中的add5();、add6();等写法完全不符合Java语法规范——既不是合法的方法定义(缺少返回类型、访问修饰符),也不能直接在类体中写无上下文的方法调用语句。
  2. 继承逻辑错误:
    • a3是a5的父类,父类对象无法直接调用子类独有的方法,add5是a5中定义的专属方法,a3本身没有该方法,直接调用会报错。
    • 同理,a4是a6、a7、a8的父类,add6、add7、add8分别是这三个子类的独有方法,a4对象无法直接调用。

修复后的代码示例

先移除a3、a4中错误的方法声明,再根据继承逻辑调整调用方式:

class a1{
    int n1=80,n2=70,n3=60,n4=50,n5=40,n6=30,n7=20,n8=10;
}

class a2 extends a1{
    int n9;
}

class a3 extends a2{
    // 移除错误的add5();声明
}

class a4 extends a2{
    // 移除错误的add6();、add7();、add8();声明
}

class a5 extends a3{
    public void add5(){
        n9=n1+n2+n3+n4+n5;
        System.out.println("sum is : "+n9);
    }
}

class a6 extends a4{
    public void add6(){
        n9=n1+n2+n3+n4+n5+n6;
        System.out.println("sum is : "+n9);
    }
}

class a7 extends a4{
    public void add7(){
        n9=n1+n2+n3+n4+n5+n6+n7;
        System.out.println("sum is : "+n9);
    }
}

class a8 extends a4{
    public void add8(){
        n9=n1+n2+n3+n4+n5+n6+n7+n8;
        System.out.println("sum is : "+n9);
    }
}

class b1 extends a1{
    int n9;
}

class b2 extends b1{
    public void sub2(){
        n9=n1-n2-n3;
        System.out.println("subtraction is : "+n9);
    }
}

class b3 extends b1{
    public void sub3(){
        n9=n1-n2-n3-n4;
        System.out.println("subtraction is : "+n9);
    }
}

class c1 extends a1{
    int n9;
}

class c2 extends c1{
    public void mul2(){
        n9=n1*n2*n3;
        System.out.println("multi is : "+n9);
    }
}

class c3 extends c1{
    public void mul3(){
        n9=n1*n2*n3*n4;
        System.out.println("multi is : "+n9);
    }
}

class hei{
    public static void main(String[] args) {
        // 调用a5的add5:直接创建a5对象,或把a3向下转型为a5
        a5 objA5 = new a5();
        objA5.add5();
        
        a3 objA3 = new a5();
        ((a5)objA3).add5();
        
        // 调用a6、a7、a8的方法:创建对应子类对象
        a6 objA6 = new a6();
        objA6.add6();
        
        a7 objA7 = new a7();
        objA7.add7();
        
        a8 objA8 = new a8();
        objA8.add8();
    }
}

内容的提问来源于stack exchange,提问作者SAURABH7DEOKATE

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 10:20:38