4.2 子类父类关系

        对理解继承来说,最重要的事情是,知道哪些东西被继承了,或者说, 子类从父类那里得到了什么?

答案是:

所有东西,所有的父类的成员,包括变量的方法,都成为了子类的成员,除了构造方法.构造方法是父类所独有的, 因为它们的名字就是类的名字,所以父类的构造方法在子类中不存在.除此之外,子类继承得到父类的所有成员. 

但是得到不等于可以随便使用.每个成员有不同的访问属性,子类继承得到了父类所有成员,但是不同的访问属性使得子类在使用这些成员时有所不同 : 有些父类的成员直接成为子类的对外的界面,有些则被深深的隐藏起来,即使子类自己也不能直接访问。下表列出了不同访问属性的父类成员在子类中的访问属性。

父类成员访问

属性

在父类中的含义在子类中的含义
public对所有人开放对所有人开放
protected

只有包内其他类、自

己和子类可以访问

只有包内其他类、自己和子类可以访问
缺省

只有包内其他类可以

访问

如果子类与父类在同一个包内:

只有包内其他类可以访问

否则:相当于private,不能访问

private只有自己可以访问不能访问

public 的成员直接成为子类的public 的成员,protected的成员也直接成为子类的protected

的成员。Java的protected的意思是包内和子类可访问,所以它

比缺省的访问属性要宽一些。而对于父类的缺省的未定义访问属性的成员来说,他们说在父类所在的包内可见,如果子类不属于父类的包,那么在子类里面,这些缺省属性的成员和private的成员是一样的:不可见。父类的private 的成员在子类里仍然是存在的,只是子类中不能直接访问。我们不可以在子类中重新定义继承得到的成员的访问属性。如果我们试图重新定义一个在父类中已经存在的成员变量,那么我们是在定义一个与父类的成员变量完全无关的变量,在子类中我们可以访问这个定义在子类中的变量,在父类的方法中访问父类的那个。尽管它们同名但是互不影响。

在构造一个子类对象时,父类的构造方法也是会被调用的,而且父类的构造方法在子类的构造方法之前被调用。在程序运行过程中,子类对象的一部分空间存放的是父类对象。因为子类从父类得到继承,在子类对象初始化过程中可能会使用到父类的成员。所以父类的空间正是要先被初始化的,然后子类的空间才得到初始化。在这个过程中,如果父类的构造方法需要参数,如何传递参数就很重要了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值