1.继承体现的是"is a"的关系,表示子类是父类的一种
2.子类继承了父类的普通方法和成员变量
3.当子类继承父类时,要注意构造方法的编写:
子类的构造方法若没有手动的调用父类的构造方法(super()或super(x....),要在构造方法的第一句调用),则编译器会为构造方法自动的添加super(),调用父类的无参构造方法。(如果父类没有无参构造方法,则会编译出错,一个好的编程习惯是:不管是否有写含参数的构造方法,都要把无参构造方法写上。)
4.继承很重要体现就在多态的应用:
是指父类的引用变量可以指向子类实例对象,编译器动态绑定执行的方法。当调用方法时,先寻找实际对象的方法(即子类对象的方法),如果没有,则会去调用父类所对应的方法,依次循环。
5.方法的覆盖(重写):子类的方法覆盖父类的方法,(发生在子类和父类之间)
方法名:相同
参数列表:相同
返回值:相同(或被覆盖方法返回类型的子类型此时这两个方法具有可协变的返回类型)。
访问修饰符:不小于被覆盖方法的可见性(public>protected>默认(friendly)>private)
注意:若被覆盖的方法有抛出异常,要对它进行重写时,重写的方法对异常的处理只能有三种方法:
①不抛出异常
②抛出异常的子异常
③比被覆盖的方法抛出更少的异常
---------------------------------------------------------------------------------------------------------------------------------------------------------
方法的重载:发生在同一个类或子类和父类之间
方法名:相同
参数列表:不同(参数个数不同或参数类型不同)
返回值:可相同也可不同
访问修饰符:可相同也可不同
---------------------------------------------------------------------------------------------------------------------------------------------------------
6.几个重要注意事项:①父类定义了静态方法,则在子类中不会被重写,只是重新定义了新的一个方法,并没有多态的含义了。(见例子)
②定义为final的类或方法不允许被继承
package csjp;
import java.awt.FontFormatException;
public class base {
private int i;
public base(){
}
public base(int i){
this.i=i;
}
public void test() {
System.out.println("test");
}
public static void smethod(){
System.out.println("base static ");
}
}
package csjp;
public class Duotai extends base {
private int xx;
public Duotai() {
}
public Duotai(int xx){
super(); //自动调用父类无参构造方法
this.xx=xx;
}
/* //重写父类的方法
public void test() throws Exception{ //抛出的异常只能是1.父类异常的子类或2.不抛出异常或或3.和父类方法抛出相同的异常
System.out.println("duotai");
}*/
public static void smethod(){
System.out.println("duotai static");
}
//方法重载
public static void smethod(int i){
System.out.println("int:"+i);
}
public static void smethod(long i){
System.out.println("long:"+i);
}
public static void main(String[] args) {
Duotai d=new Duotai();
base b=d;
b.test();
Duotai.smethod(); //并没有体现多态的特性,不会覆盖父类的静态方法(b.smethod())
Duotai.smethod(10);
}
}