由继承引出的

书的第6页1.6节开始讲到了继承。
对于第7页上的这样一句话我开始不是很理解:“ 当继承现有类型能时,也就创造了新类型。这个新的类型不仅包括现有类型的所有成员(尽管private成员被隐藏了起来,并且不能访问)……”。既然private成员并不能访问到,为什么说“包括现有类型的所有成员”呢?括号中的句子开头是“尽管”,如果不是翻译的原因,那我不能理解这句话的意思。开始还以为是将父类的private成员也继承过来并称为了属于自己的private成员,但试验了一下,好像并不是这么回事,父类的private成员依然只属于父类,在子类中无法使用。
当读书笔记写到这里的时候我似乎突然明白了点这句话的意思。因为我想到了书中接下来谈到的“is-a”关系。是的,虽然无法在子类中对父类的private成员直接操作,但的确是继承了。我写了一段代码如下:
 
父类代码:
public class Friend {
 private String name;
 Friend(){}
 Friend(String name){
  this.name = name;
 }
 public void show(){
  System.out.println("My name is " + name + ". I love you.");
 }
}
 
子类代码:
public class GirlFriend extends Friend{
 GirlFriend(){}
 GirlFriend(String name){
   super(name);
 }
}
 
主文件:
public class NameShow {
 public static void main(String[] args) {
  System.out.println("Now in Friend:");
  Friend fd = new Friend("Jack");
  fd.show();
  System.out.println("Now in GirlFriend:");
  GirlFriend gfd= new GirlFriend("Rose");
  gfd.show();
  }
}
 
输出结果为:
Now in Friend:
My name is Jack. I love you.
Now in GirlFriend:
My name is Rose. I love you.
 
子类虽然无法 直接操作父类的private成员name,但通过在构造函数中调用super() ,再通过继承而来的show()方法可以看出,父类的name的确也对子类有效。
 
跳回书上的内容,书上接下来说有两种方法可以使基类与导出类产生差异,一种是在导出类中添加新方法,一种覆盖(overriding)现有方法。与之对应的两种关系分别为“is-like-a ”与“is-a”。
 
基于“ 继承”书上在此处略微提到了“ 多态”,并提到了“ 向上转型”的概念。提到一个对象可以不被当作它所属的特定类型来对待,而是将其当作其基类的对象来对待( 泛化,向上转型),而运行时依然执行其自身的代码,从而引出了“后期绑定”的概念。“在某些语言中,必须明确地声明希望某个方法具备后期绑定属性所带来的灵活性(C++是使用virtual关键字来实现的)。在这些语言中,方法在默认情况下不是动态绑定的。而 在JAVA中,动态绑定是默认行为,不需要添加额外的关键字来实现多态。”
 
基于“向上转型”又引出 单根继承结构,所有类的终极类的名字是Object,再加上接下来介绍的“ 容器”再引出“参数化类型”的概念,即“ 泛型”。
 
第一次看《Thinking in Java》的时候,感觉其内容的安排比较特别,不像国内一般的教材那样把数据类型、语法、API等像提纲一样列出来,初看的时候还觉得内容比较混乱,现在看起来实际上安排得的确是非常科学有条理的,在开头完全按照OOP的概念组织内容。
 
关于 泛型,有余在Java SE5之前,容器存储的对象都只具有Object类型,使得将对象的引用从容器中取出时必须“向下转型”而造成麻烦,为了解决这一问题,Java SE5增加了“参数化类型,在JAVA中称之为 泛型”,使编译器制定一个只接纳和取出特定对象的容器。如一个存储Shape类型的ArrayList:
    ArrayList<Shape> shapes = new ArrayList<Shape>();
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值