首页 > 代码库 > 方法重写,继承,多态

方法重写,继承,多态

1.继承:编写父类(基类/超类),含有公共的属性和方法;编写子类(衍生类/派生类),能够继承父类的属性(extends),并含有自己特有的属性。

2.子类只能继承一个父类,不能同时继承两个父类(单根性)。

  子类可以继承父类的,还可以继承父类的父类的属性和方法(传递性)。

3.super关键字:代表父类对象,在子类对父类的属性和方法进行处理时必须用super,super只能在子类中使用。super()表示父类无参构造函数,super.属性 表示调用父类的属性。

4.在继承体系中,进行初始化时,创建子类对象(new)时,程序会自动创建父类对象。在对象初始化时,先处理属性(对属性赋值(默认值或确定的值)),再执行构造函数。

在继承中,先执行父类的属性,再执行父类的构造函数,然后执行子类的属性,再执行子类的构造函数。

5.子类不能继承的情况:子类不能访问父类的私有成员;不能调用父类的构造函数;子类和父类不在同一个包里,使用默认访问权限的成员。

6.何时使用继承:满足is-a的关系。

7.方法的重写:在继承关系的子类中,重新定义了父类的某个方法。

 重写的方法名,参数,返回值类型必须与父类相同。子类中重写的方法的访问修饰符不能比其父类的严格。不能对私有的方法进行重写。

8.abstract关键字:抽象类,任何类前面加了abstract,就不能进行实例化(new创建对象)。但是可以定义一个抽象类的对象变量,但是它只引用非抽象子类的对象。例如Person类是抽象类,Student是其子类,则Person p=new Student();是正确的。

抽象方法:public abstract void play();(无实际意义)

抽象方法必须放在抽象类中(抽象类中可以没有抽象方法);没有方法体(无大括号);抽象方法必须在子类中实现(在子类中对父类中的这个抽象方法进行重写),除非子类是抽象类。 

9.final关键字:最终的,不能再派生了,如public final class Student extends Person(){}则这个类不能被其他类继承了;若final修饰方法,如public final void work(),则这个方法是最终的方法,不能被重写;若final修饰属性,属性值不能被修改,可以看做常量。

10.static关键字:静态,static修饰的属性和方法称为类属性和类方法,不用new创建实例,可以直接使用,类名.属性/方法;而不用static修饰的属性和方法必须创建一个对象,然后用对象.属性/方法。

11.静态代码块先执行,然后构造函数等后执行。静态属性的初始化只进行一次,之后不用再初始化,直接使用即可。

12.多态:同一事物因为条件不同,产生的结果不同。

在程序中,可以用子类重写父类的方法,然后父类引用子类的对象,调用方法,实现多态。

多态 Instrument ins=new Piano(); 

     ins.play();

这两步是父类引用子类的对象,再调用相关的方法实现相应的功能(这里play   是piano的而不是instrument的)

13.向上转型:父类引用子类(多态)

向下转型:强制类型转换,父类转换成子类(用instanceof来判断是哪个子类)

方法重写,继承,多态