Напишите void volume()
вместо final void volume
Не используйте ключевое слово final
.Ваша программа должна выглядеть так:
import java.util.*;
class Supers {
int x,y;
Supers(int a,int b) {
x = a;
y = b;
}
void volume() {
System.out.println("area is "+ x*y);
}
}
class Sub extends Supers {
int z;
Sub(int a,int b,int c) {
super(a,b);
z = c;
}
void volume() {
super.volume(); // Call volume() method of Supers class
System.out.println("volume is "+ x*y*z);
}
}
class M {
public static void main(String args[]) {
Sub obj = new Sub(1,2,3);
obj.volume();
}
}
Используйте final
, если вы хотите, чтобы подклассы не перекрывали членов суперкласса.
В вышеприведенной программе у нас есть метод volume()
с тем же именем и тем же параметром в подклассе, как и в родительском классе.Поэтому метод volume()
, пока мы наследуем родительский класс, будет переопределен в подклассе.И именно поэтому строка System.out.println("area is "+ x*y);
не может быть напечатана, потому что метод volume()
подкласса переопределит метод.Таким образом, будет выполнена строка System.out.println("volume is "+ x*y*z);
.
Для вызова метода тома класса Supers наиболее эффективным способом является использование super.volume()
в методе volume () подкласса, как показано в приведенном выше коде.
Вывод:
area is 2
volume is 6
Или мы можем создать объект в основном методе.Тогда это будет выглядеть так:
class M {
public static void main(String args[]) {
Supers obj1 = new Supers(2,4);
obj1.volume();
Sub obj = new Sub(1,2,3);
obj.volume();
}
}
Или вместо доступа к методу volume () суперкласса, мы можем просто добавить System.out.println("area is "+ x*y);
в метод volume () подкласса.
void volume() {
System.out.println("area is "+ x*y);
System.out.println("volume is "+ x*y*z);
}