广州北大青鸟计算机职业培训学校
互联网技术培训、软件技术培训、大数据培训、云计算培训、数据分析培训信息网
当前位置:网站首页 > 软件教程 > Java技术 > 正文

惠州什么是虚方法?_北大青鸟IT学校

作者:邓华发布时间:2021-01-13分类:Java技术浏览:867


导读:什么是虚方法?Java是现在非常主流的编程语言之一,很多人想转行学习IT,首选Java语言。那么,下面就让我们一起来看看什么是虚方法。

什么是虚方法?Java是现在非常主流的编程语言之一,很多人想转行学习IT,首选Java语言。那么,下面就让我们一起来看看什么是虚方法。

我们将介绍在Java中,当设计类时,被重写的方法的行为怎样影响多态性。

我们已经讨论了方法的重写,也就是子类能够重写父类的方法。

当子类对象调用重写的方法时,调用的是子类的方法,而不是父类中被重写的方法。

要想调用父类中被重写的方法,则必须使用关键字super。

/* 文件名 : Employee.java */ public class Employee {

    private String name;

    private String address;

    private int number;

    public Employee(String name, String address, int number)

    {

       System.out.println("Constructing an Employee");

       this.name = name;

       this.address = address;

       this.number = number;

    }

    public void mailCheck()

    {

       System.out.println("Mailing a check to " + this.name

        + " " + this.address);

    }

    public String toString()

    {

       return name + " " + address + " " + number;

    }

    public String getName()

    {

       return name;

    }

    public String getAddress()

    {

       return address;

    }

    public void setAddress(String newAddress)

    {

       address = newAddress;

    }

    public int getNumber()

    {

      return number;

    }

 } 

假设下面的类继承Employee类:

/* 文件名 : Salary.java */ public class Salary extends Employee {

    private double salary; //Annual salary

    public Salary(String name, String address, int number, double

       salary)

    {

        super(name, address, number);

        setSalary(salary);

    }    public void mailCheck()

    {

        System.out.println("Within mailCheck of Salary class ");

        System.out.println("Mailing check to " + getName()

        + " with salary " + salary);

    }

    public double getSalary()

    {

        return salary;

    }

    public void setSalary(double newSalary)

    {

        if(newSalary >= 0.0)

        {

           salary = newSalary;

        }

    }

    public double computePay()

    {

       System.out.println("Computing salary pay for " + getName());

       return salary/52;

    }

 }

现在我们仔细阅读下面的代码,尝试给出它的输出结果:

/* 文件名 : VirtualDemo.java */ public class VirtualDemo {

    public static void main(String [] args)

    {

       Salary s = new Salary("Mohd Mohtashim", "Ambehta, UP", 3, 3600.00);

       Employee e = new Salary("John Adams", "Boston, MA", 2, 2400.00);

       System.out.println("Call mailCheck using Salary reference --");

       s.mailCheck();

       System.out.println("\n Call mailCheck using Employee reference--");

       e.mailCheck();

     }

 }

以上实例编译运行结果如下:

Constructing an Employee

Constructing an Employee

Call mailCheck using Salary reference --

Within mailCheck of Salary class 

Mailing check to Mohd Mohtashim with salary 3600.0

Call mailCheck using Employee reference-- 

Within mailCheck of Salary class

Mailing check to John Adams with salary 2400.0 

例子中,我们实例化了两个Salary对象。一个使用Salary引用s,另一个使用Employee引用。

编译时,编译器检查到mailCheck()方法在Salary类中的声明。

在调用s.mailCheck()时,Java虚拟机(JVM)调用Salary类的mailCheck()方法。

因为e是Employee的引用,所以调用e的mailCheck()方法则有完全不同的结果。

当编译器检查e.mailCheck()方法时,编译器检查到Employee类中的mailCheck()方法。

在编译的时候,编译器使用Employee类中的mailCheck()方法验证该语句, 但是在运行的时候,Java虚拟机(JVM)调用的是Salary类中的mailCheck()方法。

该行为被称为虚拟方法调用,该方法被称为虚拟方法。

Java中所有的方法都能以这种方式表现,借此,重写的方法能在运行时调用,不管编译的时候源代码中引用变量是什么数据类型。

想知道更多关于软件开发的资讯,联系在线客服,或者来惠州北大青鸟新方舟校区了解了解。


java5.png

Java


标签:惠州计算机JAVA软件开发惠州计算机Java软件开发惠州计算机JAVA培训惠州计算机JAVA软件开发学校惠州计算机Java软件开发培训JAVAJava软件开发


Java技术排行
标签列表
网站分类
文章归档
最近发表