1.继承性的使用:继承性是类与类之间的一种关系的描述。
1.1为什么要有类的继承性?
减少了冗余;提供了代码的复用性;更好的扩展性;为多态的使用,提供前提。
1.2格式:class B extends A{}
1.3特点:子类继承父类后,就获取了父类中声明的结构:属性、方法。子类在继承父类的基础上,还可以定义自己特有的结构:属性、方法。
强调的是:子类可以获取父类中声明为private的结构的,只是由于封装性的影响,子类不可以直接调用罢了。
1.4子父类是相对的概念。
一个父类(超类)可以被多个子类所继承。
反之,一个子类只能有声明一个父类。
2.java.lang.Object类的理解:
如果一个类没有显式声明父类的话,则默认继承于java.lang.Object类。
所有的java类(除了Object类)都直接或间接地继承于java.lang.Object类。
所有的java类在权限允许的情况下,可以调用java.lang.Object类中的结构。
3.【面试题】区分:方法的重载(overload)与重写(overwrite/override)
重载:同一个类中,相同名字,不同参数列表的方法之间构成重载。
重写:
定义:在有了类的继承之后,子类可以对父类中声明的方法进行“覆盖”或“覆写”,对方法的“覆盖”或“覆写”就称为方法的重写。
使用:子类重写了父类的方法以后,如果通过子类的对象调用重写的方法,此时执行的就是子类重写父类的方法。
规则:
子类中:重写的方法;父类中:被重写的方法。
格式:权限修饰符 返回值类型 方法名(形参列表) throws 异常类型{//方法体}
规则:1.子类重写的方法必须与父类被重写的方法的“方法名(形参列表)”相同。
2.权限修饰符:子类重写的方法的权限修饰不小于父类被重写的方法的权限修饰。
特别的:子类不能重写父类中的private方法。
3.返回值类型:父类被重写的方法的返回值类型是void,则子类重写的方法的返回值类型也必须是void。
4.返回值类型:父类被重写的方法的返回值类型不是void,子类重写的方法的返回值类型不大于父类被重写的返回值类型。
比如:父类的方法返回的是Person类型,子类方法可以返回Person类型或Person的子类类型。
5.异常:子类重写的方法抛出异常类型 不大于 父类被重写方法抛出的异常类型。
6.子类或父类同名同形参的方法,要么都声明为static的,要么都声明为非static。
4.四种访问权限大小:
private(类内部可以使用)<缺省(同一个包中可以使用)<protected(不同包子类可以使用)<public(任何地方可以使用)
5.关键字:super
super在子类中可以调用父类的方法(super.方法)、属性(super.属性),构造方法(super(参数列表))。我们可以在子类的方法或构造器中调用父类的属性或方法(前提:权限允许),但是,多数情况下,我们都选择省略此“super.”。但是,如果子类中出现同名的属性或者子类对父类的方法进行了重写同时又希望调用父类中被重写的方法的情况下,为了区分同名的属性或方法,可以使用“super.属性”或者“super.方法”的方式,显式地表明调用的是父类的属性、父类中被重写的方法。
明确:子类的属性不能覆盖父类中同名的属性。
super调用构造器:
在子类的构造器中,可以通过“super(形参列表)”的方式,显式地调用父类中指定的构造器。
“super(形参列表)”结构如果使用,必须声明在子类的构造器的首行!
在子类构造器的首行,不能同时使用“this(形参列表)”或“super(形参列表)”。
默认情况下,在子类构造器的首行,使用“super()”。
n个构造方法中,至少有一个方法的首行使用的是super()。
在子类构造器的首行,要么使用“this(形参列表)”,要么使用“super(形参列表)”,没有别的情况了。
6.super开发中的一个小问题:
父类:
package com;
public class Account{
private double balance;
public Account(double balance){
this.balance = balance;
}
}
子类:
package com;
public class CheckingAccount extends Account{
public CheckingAccount(){
// double d ;
// super(d);
}
}
以上子类与父类的搭配会报错:
由于父类中含有带参构造器,故系统不会提供默认的无参构造器。因此在子类的默认构造器中默认调用父类的super()时会调不到。解决方案有两个:一是在父类中手动声明无参构造器;二是在子类的构造器中调用父类的含参构造器。
7.多态性的使用:
7.1多态:可以理解为一个事物的多种形态。
7.2多态性在java中的体现:(广义上)
方法的重载和重写。
子类对象的多态性。
7.3多态性在java中的体现:(狭义上)
子类对象的多态性:父类的引用指向子类的对象(或子类的对象赋给父类的引用)。
7.4多态的使用情景:虚拟方法调用:在编译时(javac.exe),我们关注引用变量声明的类型,只能通过引用变量调用父类中的结构。但在运行时(java.exe),实际调用的是子类重写父类的方法。
总结:编译看左边,运行看右边。
7.5子类对象的多态性使用前提:类的继承性;方法的重写。父类不能调用子类所特有的结构。
7.6对于属性来说,没有多态的概念。