天天看点

继承和多态

子类与父类

  • 类之间的继承关系是一种由已经存在的类创建新类的机制,可以有效地实现代码的重复使用
  • 可以先定义一个共有属性的一般类(父类或超类),在此基础上定义新的类(子类)
  • 子类可以继承父类的属性和方法(子类不继承父类的构造方法),也可以定义自己独有的属性和方法
  • 父类可以是Java类库中的类,也可以是自己编写的类
  • Java不支持多重继承,即子类只能有一个父类

类继承的语法格式:

class 子类名 extends 父类名
 {
 子类的类体
 }      

• 如果一个类的声明中没有使用关键字extends,这个类被系统默认为是Object类的子类,Object类是java.lang中的类

类继承的使用:

• 如果子类继承了父类的成员变量和成员方法,就可以将它们作为己用,就像在子类中定义的一样

• 子类如果没有继承父类的某些成员变量或成员方法,则子类无法对它们进行访问或调用

成员变量的隐藏:

• 子类中定义的新的变量如果和继承过来的变量名称相同,则会隐藏继承过来的成员变量

class A{
 int first=10;
 int second=20;
}
class B extends A{
 int first=100;
 double second=200; //B的对象使用first和second时,A中的被隐藏
 int third=300;
 void change()
 { first+=50; second+=50; third+=50; }
}      

方法的重写:

• 方法的重写也是多态的一种表现

• 方法的重写是指子类可以改写父类方法所实现的功能,但是子类重写的方法必须与父类中的对应方法有相同的名称、返回类型和参数列表

• 如果父类中的方法被子类重写,则子类的对象调用这个方法时,实际运行的是子类中改写之后的方法,父类中的相应方法被隐藏了起来

关键字super:

• 关键字super代表当前对象的父类部分

• super有两种用法

1.子类使用super调用父类的构造方法

2.子类使用super操作父类中被子类隐藏的成员变量和方法

• 子类不继承父类的构造方法

1.子类中有些初始化工作需要调用父类的构造方法帮助实现,需要用super关键字

2.子类构造方法中调用父类构造方法的语法为:

super(参数列表)

4.子类构造方法中使用super调用父类构造方法时,必须把调用语句放在最开始

•子类使用super操作父类中被子类隐藏的成员变量和方法

1.super.变量名

2.super.方法名(参数列表)

子类为什么不能继承父类的构造方法

构造方法的定义是与类的名称相同:如果子类能够继承父类的构造方法,那么在子类的构造方法中就有不同于子类名称的构造法;这与构造方法的定义不符,因此子类是不能继承父类的构造方法的。