当前位置: 首页 > 知识库问答 >
问题:

为什么类备注没有继承平均类值?

万俟渝
2023-03-14
import java.util.Scanner;

class Average {
    int math, programming, oop, total;
    public void setGrade(int math, int programming, int oop) {
        this.math = math;
        this.programming = programming;
        this.oop = oop;
        this.total = (math + programming + oop) / 3;
    }
    public int getTotal() {
        return total;
    }
}

class Remark extends Average {
    void remark() {
        int totalMark = super.getTotal();
        if(totalMark >= 75) {
            System.out.println("Pass");
        }
        else {
            System.out.println("Fail");
        }
    }
}

class Course extends Average {
    void decideCourse() {
        int total = super.getTotal();
        System.out.println("Average: " + total);
        if(total >= 91 && total <= 100) {
            System.out.print("Course Offered: \nBSE, BEED, BSAT");
        }
        else if(total >= 81 && total <= 90) {
            System.out.print("Course Offered: \nBSIT, BSCS, BSBA");
        }
        else if(total >= 75 && total <= 80) {
            System.out.print("Course Offered: \nBSITECH, DAT, BSHRM");
        }
        else if(total < 75) {
            System.out.print("Average did!");
        }
    }
}

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int math, programming, oop;
        System.out.print("Enter Grade: ");
        System.out.print("\nMath: ");
        math = sc.nextInt();
        System.out.print("Programming: ");
        programming = sc.nextInt();
        System.out.print("Object-Oriented Programming: ");
        oop = sc.nextInt();
        Course c1 = new Course();
        Remark r1 = new Remark();
        c1.setGrade(math, programming, oop);
        r1.remark();
        c1.decideCourse();
    }
}


这个问题与继承有关。学生需要根据平均分数评分。在这个代码类中,注释不是扩展平均类,当我试图从平均类中获取总数时,它不是继承。。这里有什么错误。。。其他部件工作正常

共有1个答案

荀正谊
2023-03-14

每个备注(包括r1)和每个课程(包括c1)都有您平均定义的所有字段的副本。并非存在一份平均值的共享副本;Average的每个实例都有一个,Remark和Course的每个实例都包含Average所有字段的空间。

无论输入什么值,r1。备注()。虽然r1将从Average继承getTotal的定义,但您尚未设置值,因此它们都将具有默认值0,因此getTotal将返回0。

(旁注:虽然它从技术角度来看是有效的,但你可能不会看到类似“备注”和“课程”这样的课程扩展了类似“平均分”的课程的情况:你表示如果你的课程的其他部分需要平均分,你可以通过备注或课程,但这并不像(例如)你有课程那样有意义,作业和考试都扩展了可分级项目。您将看到该原理被称为Liskov替换原理。)

 类似资料:
  • 问题内容: 我一直在使用Guice的AOP来拦截一些方法调用。我的课程实现了一个接口,我想注释接口方法,以便Guice可以选择正确的方法。即使使用继承的注释对注释类型进行注释,实现类也不会继承Inherited的java doc中所述的注释: 还要注意,此元注释仅使注释从超类继承;已实现的接口上的注释无效。 这可能是什么原因?了解对象的类在运行时确实实现的所有接口并不是一件容易的事,因此在此决定背

  • 类继承是一个类扩展另一个类的一种方式。 因此,我们可以在现有功能之上创建新功能。 “extends” 关键字 假设我们有 class Animal: class Animal { constructor(name) { this.speed = 0; this.name = name; } run(speed) { this.speed = speed;

  • 问题内容: 我可以以某种方式在抽象类上对一组注释进行分组,并且扩展该类的每个类都已自动分配了这些注释? 至少以下情况不起作用: 问题答案: 答案是不 除非注释类型具有@Inherited元注释,否则不会继承Java注释:https : //docs.oracle.com/javase/7/docs/api/java/lang/annotation/Inherited.html。 Spring的注释

  • 我能以某种方式将一组注释分组到一个抽象类上,并且每个扩展该类的类都自动分配了这些注释吗? 至少以下内容不起作用:

  • 问题内容: 我一直在看该类的源代码。对我来说,这似乎是一个普通的抽象类,带有受保护的构造函数。它不是最终的,它内部没有任何特殊的注释,并且不使用本机代码。但是,它不能直接子类化。实际上,以下代码无法编译: 我知道这是Java中的一个特殊类,并且我知道有充分的理由应禁止直接子类化。但是从技术上讲,您如何执行此行为?程序员是否可以创建类似的非最终类,尽管具有可访问的构造函数,该类仍不允许直接子类化?

  • 问题内容: 众所周知,有多种原因(请参阅第一个答案)。为什么只有一个例外涵盖所有这些情况,而不是多个继承自的细粒度情况? 问题答案: 我期望如此,因为发生这种情况时,您实际上什么也做不了:为何耗尽资源几乎无关紧要,因为无论如何您都被搞砸了。也许附加信息会很好,但是… 我知道tomcat会尝试执行“内存不足降落伞”操作,在此过程中,它们会保留一块内存并尝试释放它,但是我不确定它的工作原理。