问题是“在Java的父/基和子/派生类中我们可以有相同的数据成员”吗?
是的,在Parent和Child类中可以有相同的数据成员。
现在,我们将看到父级和子级的能力或实力。父类引用可以保留自己的对象,子类对象也可以保留,而子类引用只能保留自己的对象。
父类对象只能访问其数据,这意味着该类无权访问子类数据。
借助示例,我们将看到如果在[Parent和Child]类中包含相同的数据成员,将会发生什么情况。
示例
class Base { // 声明和实例化数据成员 String str = "We are in Parent class"; } class Derived extends Base { // 声明和实例化数据成员 String str = "We are in Child class"; } class Main { public static void main(String[] args) { //创建一个基类对象 Base base = new Base(); //使用基类对象调用基类数据成员。 System.out.println("Base class reference can access only base class member :" + " " + base.str); //创建一个派生类对象 Derived derived = new Derived(); //用派生类对象调用派生类数据成员。 System.out.println("Derived class reference can access both Base and Derived class member : " + " " + derived.str); //这里的基类引用持有一个对象 //派生类,它是完全有效的 base = new Derived(); //基类引用只能访问基类 //数据成员是否持有对象是 //基类或派生类。 System.out.println("Base class reference holding an object of Derived class but it can access only Base class data member :" + " " + base.str); //我们不需要包含以下代码...。 /* //在这里,派生类引用持有一个对象 //基类,它完全无效 derived = new Base(); //的对象 //类,那么我们将得到编译时错误 System.out.println("We will get compile time error"); */ } }
输出结果
E:\Programs>javac Main.java E:\Programs>java Main Base class reference can access only base class member : We are in Parent class Derived class reference can access both Base and Derived class member: We are in Child class Base class reference holding an object of Derived class but it can access only Base class data member: We are in Parent class
在以上程序中,我们有四种情况:
如果基类引用包含基类的对象,则它是完全有效的,并且我们只能访问基类数据成员。
Base base = new Base();
如果“派生类”引用持有“派生类”的对象,则它是完全有效的,我们可以访问“基类”和“派生类”数据成员。
Derived derived = new Derived();
如果基类引用包含派生类的对象,则它也是完全有效的,但它只能访问基类数据成员。
Base base = new Derived();
如果派生类引用包含基类的对象,则它完全无效,在这种情况下,我们将获得编译时错误。
Derived derived = new Derived();