一、多态
1、多态的三个前提
1)、存在继承关系
2)、子类重写父类方法
3)、父类数据类型的引用指向子类对象
2、多态成员访问的特点
Animal am = new Cat();
1)、成员变量:编译看左边(父类),运行看左边(父类)
2)、成员方法:编译看左边(父类),运行看右边(子类)
3)、静态方法:编译看左边(父类),运行看左边(父类)
重载对应编译时,重写对应运行时
(静态和类相关,算不上重写,所以,访问还是左边的)
综上,只有非静态的成员方法,编译看左边,运行看右边
3、多态的缺点
多态后不能使用子类特有的属性和方法,如果想要使用子类的属性和方法,必须进行类型强制转换。
Cat ct = (Cat)am;
ct.catchMouse();
4、多态的优点
减少了多余对象的创建,不用说为了使用子类的某个方法而必须重新在堆上创建一个子类的对象
二、方法重写
重写方法的规则:
1)、重写方法不能比被重写方法限制有更严格的访问级别。
2)、参数列表必须与被重写方法的相同。
3)、返回类型必须与被重写方法的返回类型相同。
4)、重写方法不能抛出新的异常或者比被重写方法声明的检查异常更广的检查异常。但是可以抛出更少,更有限或者不抛出异常。
5)、不能重写被标识为final的方法。
6)、如果一个方法不能被继承,则不能重写它。
请牢记,多态只看父类引用的方法,而不看子类对象的方法!
三、方法重载
重载方法的规则。
1)、被重载的方法必须改变参数列表。
2)、被重载的方法与返回类型无关。也就是说,不能通过返回类型来区分重载方法
3)、被重载的方法可以改变访问修饰符。
4)、被重载的方法可以声明新的或者更广的检查异常。
5)、方法能够在一个类中或者在一个子类中被重载。
四、构造器
1、构造方法的规则
1)、构造方法能使用任何访问修饰符。
2)、构造方法的名称必须与类名相同。
3)、构造方法不能有返回类型。
4)、如果不在类中创建自己的构造方法,编译器会自动生成默认的不带参数的构造函数。
5)、如果只创建了带参数的构造方法,那么编译器不会自动添加无参的构造方法的
6)、在每个构造方法中,如果使用了重载构造函数this()方法,或者父类的构造方法super()方法,那么this()方法或者super()方法必须放在第一行。而且这两个方法只能选择一个,因此它们之间没有顺序问题。
7)、除了编译器生成的构造方法,而且没有显式地调用super()方法,那么编译器会插入一个super()无参调用。
8)、抽象类有构造方法。
2、继承中的构造方法要遵循哪些原则
1)、子类的构造过程中必须调用其基类的构造方法(也就说在运行子类构造方法时肯定是先运行父类的构造方法)。
2)、子类可以在自己的构造方法中使用super(argument_list)调用基类的构造方法。
2.1、使用this(argument_list)调用本类的另外构造方法。
2.2、如果调用super,必须写在子类构造方法的第一行。
3)、如果子类的构造方法中没有显示的调用基类的构造方法,则系统默认调用基类的无参数构造方法。
4)、如果子类构造方法中既没有显示调用基类构造方法,而基类又没有无参数的构造方法,则编译出错。