- Что такое виртуальная функция в Java?
- Что это такое?
- Пример
- С интерфейсами
- Чистая
- Полиморфизм
- Запомни
- Virtual Function in JAVA
- Share this post
- Java Language Polymorphism Virtual functions
- Are there virtual methods in java
- Learn Latest Tutorials
- Preparation
- Trending Technologies
- B.Tech / MCA
- Javatpoint Services
- Training For College Campus
Что такое виртуальная функция в Java?
Java – это объектно-ориентированный язык программирования, который поддерживает такие понятия, как полиморфизм, наследование, абстракция и т. д. Эти концепции ООП вращаются вокруг классов, объектов и функций-членов. Виртуальная функция в Java – одна из таких концепций, которая помогает в полиморфизме во время выполнения.
Что это такое?
Поведение виртуальной функции может быть переопределено наследующей функцией класса с тем же именем. Она в основном определяется в базовом классе и переопределяется в унаследованном классе.
Ожидается, что виртуальная функция будет определена в производном классе. Мы можем вызвать виртуальную функцию, ссылаясь на объект производного класса, используя ссылку или указатель базового класса.
Каждый нестатический метод по умолчанию является виртуальным методом. В Java нет виртуального ключевого слова, такого как C ++, но мы можем определить его и использовать для таких понятий, как полиморфизм во время выполнения.
Пример
class Vehicle < void make()< System.out.println("heavy duty"); >> public class Trucks extends Vehicle < void make()< System.out.println("Transport vehicle for heavy duty"); >public static void main(String args[]) < Vehicle ob1 = new Trucks(); ob1.make(); >>
Output: Transport vehicle for heavy duty
Каждый нестатический метод является виртуальной функцией, кроме финальных и закрытых методов. Методы, которые нельзя использовать для полиморфизма, не рассматриваются как виртуальные функции.
Статическая функция не считается виртуальной функцией, потому что статический метод связан с самим классом. Поэтому мы не можем вызвать статический метод из имени объекта или класса для полиморфизма. Даже когда мы переопределяем статический метод, он не резонирует с концепцией полиморфизма.
С интерфейсами
Все интерфейсы Java являются виртуальными, они полагаются на реализующие классы для обеспечения реализации методов. Код для выполнения выбирается во время выполнения. Вот простой пример для лучшего понимания.
interface Car < void applyBrakes(); >interface Audi implements Car < void applyBrakes()< System.out.println("breaks Applied"); >>
Здесь applyBreaks() является виртуальным, потому что функции в интерфейсах предназначены для переопределения.
Чистая
Чистая виртуальная функция – это виртуальная функция, для которой у нас нет реализаций. Абстрактный метод можно рассматривать как чисто виртуальную функцию. Давайте рассмотрим пример, чтобы лучше это понять.
abstract class Dog < final void bark()< System.out.println("woof"); >abstract void jump(); //this is a pure virtual function > class MyDog extends Dog < void jump()< System.out.println("Jumps in the air"); >> public class Runner < public static void main(String args[])< Dog ob1 = new MyDog(); ob1.jump(); >>
Полиморфизм
Полиморфизм во время выполнения – это когда вызов переопределенного метода разрешается во время выполнения, а не во время компиляции. Переопределенный метод вызывается через ссылочную переменную базового класса.
class Edureka < public void show()< System.out.println("welcome to edureka"); >> class Course extends Edureka < public void show()< System.out.println("Java Certification Program"); >public static void main(String args[]) < Edureka ob1 = new Course(); ob1.show(); >>
Output: Java Certification Course
Запомни
- Для виртуальной функции в Java вам не нужно явное объявление. Это любая функция, которая у нас есть в базовом классе и переопределена в производном классе с тем же именем.
- Указатель базового класса может использоваться для ссылки на объект производного класса.
- Во время выполнения программы указатель базового класса используется для вызова функций производного класса.
Virtual Function in JAVA
The programmers coming from c++ background to Java normally think that where is the Virtual function? In Java there is no keyword names “virtual“.
Definition of Virtual from wiki:
In object-oriented programming, a virtual function or virtual method is a function or method whose behaviour can be overridden within an inheriting class by a function with the same signature to provide the polymorphic behavior.
Therefore according to definition, every non-static method in JAVA is by default virtual method except final and private methods. The methods which cannot be inherited for polymorphic behavior is not a virtual method.
import java.util.*; public class Animal < public void eat() < System.out.println("I eat like a generic Animal."); >public static void main(String[] args) < Listanimals = new LinkedList(); animals.add(new Animal()); animals.add(new Wolf()); animals.add(new Fish()); animals.add(new Goldfish()); animals.add(new OtherAnimal()); for (Animal currentAnimal : animals) < currentAnimal.eat(); >> > public class Wolf extends Animal < @Override public void eat() < System.out.println("I eat like a wolf!"); >> public class Fish extends Animal < @Override public void eat() < System.out.println("I eat like a fish!"); >> public class Goldfish extends Fish < @Override public void eat() < System.out.println("I eat like a goldfish!"); >> public class OtherAnimal extends Animal <>
I eat like a generic Animal.
I eat like a wolf!
I eat like a fish!
I eat like a goldfish!
I eat like a generic Animal.
Abstract class is nothing but the pure virtual method equivalent to C++ in Java.
Question : why we say that static method is not a virtual method in Java?
Answer : static method is bound to the class itself, so calling the static method from class name or object does not provide the polymorphic behavior to the static method. We can override the static method however it will not give the advantage of the polymorphism.
Share this post
Java Language Polymorphism Virtual functions
Virtual Methods are methods in Java that are non-static and without the keyword Final in front. All methods by default are virtual in Java. Virtual Methods play important roles in Polymorphism because children classes in Java can override their parent classes’ methods if the function being overriden is non-static and has the same method signature.
There are, however, some methods that are not virtual. For example, if the method is declared private or with the keyword final, then the method is not Virtual.
Consider the following modified example of inheritance with Virtual Methods from this StackOverflow post How do virtual functions work in C# and Java? :
public class A < public void hello()< System.out.println("Hello"); >public void boo() < System.out.println("Say boo"); >> public class B extends A < public void hello()< System.out.println("No"); >public void boo() < System.out.println("Say haha"); >>
If we invoke class B and call hello() and boo(), we would get «No» and «Say haha» as the resulting output because B overrides the same methods from A. Even though the example above is almost exactly the same as method overriding, it is important to understand that the methods in class A are all, by default, Virtual.
Additionally, we can implement Virtual methods using the abstract keyword. Methods declared with the keyword «abstract» does not have a method definition, meaning the method’s body is not yet implemented. Consider the example from above again, except the boo() method is declared abstract:
public class A < public void hello()< System.out.println("Hello"); >abstract void boo(); > public class B extends A < public void hello()< System.out.println("No"); >public void boo() < System.out.println("Say haha"); >>
If we invoke boo() from B, the output will still be «Say haha» since B inherits the abstract method boo() and makes boo () output «Say haha».
Sources used and further readings:
Check out this great answer that gives a much more complete information about Virtual functions:
PDF — Download Java Language for free
Are there virtual methods in java
Learn Latest Tutorials
Preparation
Trending Technologies
B.Tech / MCA
Javatpoint Services
JavaTpoint offers too many high quality services. Mail us on h[email protected], to get more information about given services.
- Website Designing
- Website Development
- Java Development
- PHP Development
- WordPress
- Graphic Designing
- Logo
- Digital Marketing
- On Page and Off Page SEO
- PPC
- Content Development
- Corporate Training
- Classroom and Online Training
- Data Entry
Training For College Campus
JavaTpoint offers college campus training on Core Java, Advance Java, .Net, Android, Hadoop, PHP, Web Technology and Python. Please mail your requirement at [email protected].
Duration: 1 week to 2 week
Like/Subscribe us for latest updates or newsletter