java应用软件中哪里需要动态调度?

java应用软件中哪里需要动态调度?,java,Java,java动态调度中的软件应用程序在哪里可能有用 班级学生{ int-maxRollNo=200; } 班级学生延伸学生{ int maxRollNo=120; } 班级大学生延伸到在校学生{ int maxRollNo=100; } 公开课学生测验{ 公共静态void main(字符串参数[]){ //超类可以包含子类对象。 学生obj1=新大学生(); 学生obj2=新学生(); //在这两个调用中,将打印超级类的maxRollNo。 System.out.println(obj1.maxRo

java动态调度中的软件应用程序在哪里可能有用

班级学生{
int-maxRollNo=200;
}
班级学生延伸学生{
int maxRollNo=120;
}
班级大学生延伸到在校学生{
int maxRollNo=100;
}
公开课学生测验{
公共静态void main(字符串参数[]){
//超类可以包含子类对象。
学生obj1=新大学生();
学生obj2=新学生();
//在这两个调用中,将打印超级类的maxRollNo。
System.out.println(obj1.maxRollNo);
System.out.println(obj2.maxRollNo);
}
}

上面的代码是可以理解的,但是在实际的软件开发中,这种动态分派方法在哪里有用呢?

方法重写是Java支持运行时多态性的方法之一。动态方法分派是一种机制,通过这种机制,在运行时而不是编译时解析对重写方法的调用

  • 当通过超类引用调用重写的方法时, Java确定该方法的哪个版本(超类/子类) 将根据所引用对象的类型执行 在呼叫发生时发送到。因此,该决定是在 运行时
  • 在运行时,它取决于所引用对象的类型 (不是参考变量的类型)来确定 将执行重写方法的版本
  • 超类引用变量可以引用子类对象。这 也被称为向上投射。Java使用这个事实来解析对 在运行时重写的方法
  • 因此,如果超类包含被子类重写的方法,那么当通过超类引用变量引用不同类型的对象时,将执行该方法的不同版本。下面是一个演示动态方法分派的示例:

    class Student {
        int maxRollNo = 200;
    
        void m1() 
        { 
            System.out.println("Inside Student 's m1 method"); 
        } 
    }
    class SchoolStudent extends Student{
        int maxRollNo = 120;
    
        void m1() 
        { 
            System.out.println("Inside SchoolStudent 's m1 method"); 
        } 
    }
    class CollegeStudent extends SchoolStudent{
        int maxRollNo = 100;
    
        void m1() 
        { 
            System.out.println("Inside CollegeStudent 's m1 method"); 
        } 
    }
    

    现在在Java中,我们只能重写方法,不能重写变量(数据成员),因此运行时多态性不能由数据成员实现。例如:

    obj1.maxRollNo 
    o/p :- 200
    
    obj2.maxRollNo 
    o/p :- 120
    
    obj3.maxRollNo 
    o/p :- 100
    
    obj4.maxRollNo 
    o/p :- 200
    

    代码中没有“动态调度”。你到底在问什么?您做了哪些研究(例如使用Google)?动态调度在Java软件开发中何时有用?空气什么时候对人类有用?夸张?是的,但不是太多。为什么我们不能为我们要调用的方法所在的相应类创建对象,而不是进行向上转换?你能解释一下为什么需要实时调用吗?在运行时解析方法调用的优点是什么?动态调度是一个非常有用的概念。假设您有1种方法来计算银行每个子类的利率。现在,当您想要计算利率时,您可以使用bank obj引用来调用interest方法,编译器将决定应该运行哪个银行利率方法。
    obj1.m1();
    o/p :- Inside CollegeStudent 's m1 method
    
    obj2.m1();
    o/p :- Inside CollegeStudent 's m1 method
    
    obj3.m1();
    o/p :- Inside CollegeStudent 's m1 method
    
    obj4.m1();
    o/p :- Inside SchoolStudent's m1 method
    
    obj1.maxRollNo 
    o/p :- 200
    
    obj2.maxRollNo 
    o/p :- 120
    
    obj3.maxRollNo 
    o/p :- 100
    
    obj4.maxRollNo 
    o/p :- 200