继承:类、超类、子类
class 子类名 extends 父类名
- Employee:超类(superclass),基类(base class),父类(parent class)
- Manager:子类(subclass),派生类(derived class),孩子类(child class)
子类将继承父类成员 ,但不能直接访问父类private成员(用get和set方法)
覆盖与重载
子类可对父类进行扩展和特殊化:
(1)添加成员变量和方法
(2)重新定义父类中已有的方法:覆盖(override ) 子类中的方法应与父类中的被覆盖的方法有完全相同的:参数列表、返回值;而且访问权限不能更严格; super调用父类被覆盖的方法
class Manager extends Employee
{
private double bonus;//添加新的成员变量
public void setBonus(double bonus) //添加新的方法
{ this.bonus=bonus; }
public double getSalary( )//覆盖父类中的方法
{
double baseSalary=super.getSalary( );
return baseSalary+bonus;
}
}
子类的构造方法:
(1)在子类的构造方法中使用super(参数)调用父类的含参构造方法, super必须是第一句;
public Manager( String n,double s,int year,int month,int day)//构造方法
{
super(n,s,year,month,day);
bonus=0;
}
(2)若子类的构造方法中,没有使用super调用父类的构造方法和this调用重载的其他构造方法,则在创建子类对象时,系统默认先调用父类的无参构造方法,然后执行子类的构造方法;
(3)this( )和super( )不能同时出现。
顺序:父类回溯初始化 --> 声明中的初始化 --> 本类中的构造函数 : Sandwitch例子
阻止继承
final:
- final标记的类不能被继承
- final标记的方法不能被覆盖
- final标记的量是常量,只能赋值一次
多态和动态绑定 ?
多态:
- 一个对象(引用)变量可以引用多种实际类型对象的现象称为多态。
- 一个对象(引用)变量可以引用这个类和该类的所有子类对象。
抽象类(abstract class)
方法交给子类根据自己的情况实现
访问控制
- public:所有类可见
- protected:对子类和本包可见(继承访问权限)
- private:本类可见
- 缺省:类前面不加修饰,对本包可见
Object类【所有类的最终父类(根)】
class Employee
{…
}
//与下面相同
class Employee extends Object
{…
}
可以使用Object引用变量引用任何类型的对象
Object obj=new Employee(“Jack”,35000);
Employee e=(Employee)obj;
equals方法
- 检测一个对象是否等于另一个对象
- Object类中提供的实现为比较是否具有相同的引用
- 可在类中重新定义该方法,以实现预期的操作
hashCode方法
toString方法
接口
描述具有什么功能,而不给出每个功能的具体实现,对希望符合这个接口的类的一组需求描述
- 接口中的方法:隐含为public abstract
- 接口中的成员变量:隐含为public static final
接口的定义:
[public] interface 接口名 [extends 接口列表]
{
返回类型 方法名(…);
…
常量类型 常量名=. . . ;
…
}
[public] interface 接口名 [extends 接口列表]
{
返回类型 方法名(…);
…
常量类型 常量名=. . . ;
…
}
接口的实现:
当一个类声明 implements 某一 interface 时,必须具体实现该 interface 中定义的抽象方法,并把此方法定义为public的(抽象类除外)
接口特点:
- 一个类可以实现一个或多个接口
- 可以定义接口引用变量,引用实现了接口的类的对象
- instanceof 可以检查一个对象是否实现了某个特定的接口
- 利用接口可实现多重继承的大部分功能,同时避免其复杂性
回调
Timer
对象克隆
内部类