再谈Java

继承
类、超类和子类
假设经理与普通员工之间存在一些差异,但是也有相同的地方,这种情况就可以使用继承。
定义子类
关键字extends表示继承,所有的继承都是公有继承,关键字extends表明正在构建一个新类继承于一个已经存在的类,已经存在的类可以称为超类、基类、父类,新类称为子类、派生类、孩子类。子类拥有的功能比超类还要丰富。在设计类的时候,将通用方法放在父类中,将特殊用途的方法放在子类中。父类中的方法子类继承可以使用,但是子类中的方法父类不可以使用。
覆盖方法
超类中的有些方法不能在子类中适用,那么就需要一个新的方法来覆盖。覆盖父类的方法可能使用父类的私有域,但是只有父类的方法才可以访问私有域,,如果子类一定要访问,那么必须使用公有接口,如果子类方法覆盖父类方法,那么子类方法中调用父类方法就会报错,我们需要在子类中国使用super这个关键字,表示使用父类的方法。子类可以使用、覆盖超类的方法,增加域增加类,但是不可以删除继承的方法和域。
子类的构造器
由于子类不能调用父类的私有数据,要想初始化父类的私有数据,必须使用父类的构造函数,要想在子类中调用父类的构造函数,那么必须在子类构造函数中第一个语句使用super调用父类构造函数,这是显式调用,如果子类中没有显示调用父类的构造函数,那么就会隐式调用父类不带参数的构造函数,如果不存在这种构造函数,那么编译器报错。一个对象变量能够只是多种实际变量的现象称为多态,在运行时能够自动的选择调用那个方法的现象称为动态绑定。
继承层次
继承不限于一个层次。由一个超类派生出来的子类的集合称为继承层次。子类之间可能没有任何关系。
多态
is-a规则是一个是否应该设计为继承关系的规则,它表明了每个子类的对象也是超类的对象。例如,每个经理对象都是一个雇员对象,反之不然,is-a规则的另外一种表述法称为置换法则,它表明任何出现超类对象的地方都可以用子类代替。但是子类中特有的方法不可以声明父类类型的对象使用。不能将超类的引用赋值给子类变量。
理解方法的调用

  1. 编译器发现对象的类型和方法名名,需要注意的是,可能存在多个相同名字的方法,但是参数类型不一样,还有超类中属性为public的方法
  2. 接下来编译器通过参数找到与参数匹配的方法,
  3. 如果是private、final、static修饰的方法或者构造器,那么编译器可以准确的知道应该调用哪个方法,我们将这种调用方法的方式称为静态绑定,与此对应的是调用方法是动态绑定,调用参数依赖于隐式参数的实际类型。
  4. 当程序运行时,采用动态绑定调用方法时,虚拟机一定调用对象所引用的实际类型所适合的那个类的方法,虚拟机预先为类创建了一个方法表减少时间的开支。子类方法不能低于超类方法的可见性。修饰符等级一定要高、

阻止继承:final类和方法
有时候人们阻止某个类定义子类,不允许扩展的类称为final类。类中特有的方法看也可以声明为final。final类所有的方法声明为final方法。将方法设置为final是为了不在子类中改变语义。在实际应用中要仔细考虑什么时候使用final。
强制类型转换
将一种类型强制转换为另外一种类型称为强制类型转换。对象引用的转换语法与数值表达式转换语法类似。进行类型转换的唯一原因:在暂时忽略对象的实际类型之后,使用对象的全部功能。每个变量都有一个类型,类型描述了这个变量所引用以及能够引用的对象类型。将一个值存入变量时,编译器将检查是否允许该操作,将一个子类引用赋值给一个超类这是允许的,反之必须进行强制类型转换。在将超类转换为子类时使用instanceof这个操作符,否则报错。有的转换不可能成功,没有关系的不可能成功。
综上所述

  1. 只能在继承层次进行转换
  2. 将超类转换为子类使用instanceof进行检查

大多数情况下尽量不要让超类类型转换为子类类型
抽象类
当一个类可以是好多类的父类并且没有任何的具体特征,这个类就可以设置为抽象类,除了抽象方法外,抽象类还可以包含具体数据和具体方法。抽象方法充当着占位角色,具体实现在子类中,扩展抽象类可以有两种选择。一种是在子类中定义一部分抽象方法,这样子类还是抽象类,另外一种是定义全部抽象方法,子类就不是抽象类。类即使不含抽象方法也可以声明成抽象类。抽象类不能实例化,可以定义抽象类的引用。
受保护访问
最好将域设置为private,而方法标记为public。但是如果这样设置子类有时候也无法访问域,可以将域这是为受保护的域,关键字为protected,但是在实际应用中尽量避免这种标记,可能违背OOP提倡的数据封装的原则。受保护方法更具有实际意义,如果需要限制某个方法的使用,就可以将他设置为protected,这表明子类得到信任,可以正确的使用这个方法。
归纳访问修饰符

  1. 仅对本类可见——private
  2. 对所有类可见——public
  3. 对本包和所有子类可见——protected
  4. 对本包可见——默认
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值