编写和访问子类变量和函数,除了从父类继承的那些

时间:2015-09-25 22:57:19

标签: java inheritance

我试图在具体类中实现和访问新的数据成员和新成员函数,而不是从父类继承的类。但不能那样做。

真实问题如下:

创建一个包含2个数据成员和2个成员函数的抽象类A。 创建A类的两个具体类,名为BC。每个具体类应该有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
    }
}

1 个答案:

答案 0 :(得分:0)

您无法访问它,因为您创建的变量属于A类型,而不是C。我知道实际上obj1C但是多态性使它不是C。如您所见,您在此声明A

A obj1;

无论您在obj1中添加什么值,它仍然是A类型。那你怎么称呼summary?你需要演员!这会将obj1的类型更改为C

(C)obj1

然后你可以用它来调用summary

((C)obj1).summary();

这很容易吗?

顺便说一句,您的C课程并未按rules中的定义实施A。您应该实现它,否则您的代码将无法编译。