我试图在具体类中实现和访问新的数据成员和新成员函数,而不是从父类继承的类。但不能那样做。
真实问题如下:
创建一个包含2个数据成员和2个成员函数的抽象类A
。
创建A
类的两个具体类,名为B
和C
。每个具体类应该有2个新的数据成员和2个新的成员函数。两个类中的数据成员和成员函数不应该相同。编写创建每个子类的对象的main()
方法,并向它们发送足够的消息以显示方法的工作。
请帮忙。
代码是 -
import java.util.*;
abstract class A
{
abstract void display();
abstract void rules();
int players;
int length;
}
class B extends A
{
B(int a,int b)
{
players=a;
length=b;
}
void rules()
{
System.out.println("B rules");
}
void display()
{
System.out.println("In B players=" +players);
}
}
class C extends A
{
C(int a,int b)
{
players = a;
length = b;
}
void summary()// PROBLEM IS HERE . CAN NOT ACCESS summary
{
System.out.println("rules");
}
void display()
{
System.out.println("In C players=" +players + " length=" +length);
}
}
public class BatandBall
{
public static void main(String args[])
{
System.out.println("Airtel Champions League");
A obj = new B(10,3);
obj.display();
A obj1 = new C(11,8);
obj1.display();
obj1.summary(); // PROBLEM IS HERE . CAN NOT ACCESS summary
}
}
答案 0 :(得分:0)
您无法访问它,因为您创建的变量属于A
类型,而不是C
。我知道实际上obj1
是C
但是多态性使它不是C
。如您所见,您在此声明A
:
A obj1;
无论您在obj1
中添加什么值,它仍然是A
类型。那你怎么称呼summary
?你需要演员!这会将obj1
的类型更改为C
:
(C)obj1
然后你可以用它来调用summary
:
((C)obj1).summary();
这很容易吗?
顺便说一句,您的C
课程并未按rules
中的定义实施A
。您应该实现它,否则您的代码将无法编译。