被继承的类称为父类
" 继承父类的类称为子类
" 执行继承时,子类将获得父类的属性,并具有自身特有的属性。
" 继承关系中要存在着明显的is – a 关系。
" 注:
在java中,所有的继承都是共有继承,而没用c++中的私有和保护继承。
1)Extends 关键字
extends关键字用于继承类。
声明一个继承父类的类的通常形式如下:
class
subclass-name extends superclass-name {
//类体
}
没有extends,默认父类为Object
只能有一个父类,即单继承
子类继承父类的全部成员
2)Super 关键字
super关键字用来解决如何直接访问或初始化从父类继承来的属性。
super有两种通用形式:调用父类的构造函数、用来访问被子类的成员覆盖的父类成员。
它用在对象的构造函数中,将构造细节通过继承链往上传递。
super()必须是在子类构造函数中的第一个执行语句。
3)Instanceof 关键字
instanceof
测试第一个参数的运行时类型是否为与第二个参数兼容的赋值。
1)
方法覆盖是Java实现多态性机制的另一种方式。
2)
在类层次结构中,如果子类中的一个方法与父类中的方法有相同的方法名并具有相同数量和类型的参数列表,这种情况称为方法覆盖。
3)
当一个覆盖方法通过父类引用被调用,Java根据当前被引用对象的类型来决定执行哪个版本的方法。
4)
可以通过super关键字调用直属父类中被覆盖的方法版本。
注:java中is-a规则的另一中表述法是:置换原则。它表明程序中出现超类对象的任何地方都可以用子类对象进行置换。
在java中,不需要将方法声明为虚拟方法。动态绑定是默认的处理方式。如果不希望让一个方法具有虚拟特性,可以将它设置为final.
final 修饰符可应用于类、方法和变量。
final在应用于类、方法和变量时意义是不同的,但本质是一样的:final表示不可改变。
1) final 类
声明为final的类不能被继承。
2) final 方法
在方法声明中使用 final 关键字向编译器表明子类不能覆盖此方法。
在声明类中,一个 final 方法只被实现一次。
如果一个类为 final 类,那么它的所有方法都为隐式的 final
方法。
3) final 变量
一个变量可以声明为final,这样做的目的是阻止它的内容被修改。
声明final变量后,只能被初始化一次,然后就不能对其值进行修改。
一个final变量实质上是一个常量。
1)
定义抽象类的目的是提供可由其子类共享的一般形式。
2)
子类可以根据自身需要扩展抽象类。
3)
抽象类不能实例化。
4)
抽象方法没有函数体。
5) 抽象方法必须在子类中给出具体实现
在以下情况下,某个类将成为抽象类:
6)
当一个类的一个或多个方法为抽象方法时。
7)
当该类为一个抽象类的子类,并且没有为所有抽象方法提供实现细节或方法主体时。
8) 当一个类实现一个接口,并且没有为所有抽象方法提供实现细节或方法主体时。
5.java中的访问修饰符:
同一个
类
同一个
包
不同包
的子类
不同包
非子类
private
YES
default
YES
YES
protected
YES
YES
YES
public
YES
YES
YES
YES
Java中的protected概念要比c++中的安全性差:
(1) 仅对本类可见――――private.
(2) 对所有的类都可见――――public
(3) 对本包和所有的类可见 ――protected
(4) 对本包可见――默认,所谓默认是指没有任何修饰符的情况。