面向对象三大特征:封装性,继承性,多态性
0x01.继承
定义:
子类继承父类的属性和行为。子类可以直接访问父类的非私有属性。
格式:
class 父类(){
......
}
class 子类 extends 父类(){
......
}
特殊情况一:成员变量重名
当子类成员变量与父类成员变量出现重名,访问父类的成员变量需要加上super关键字。
格式:
super.父类成员变量
特殊情况二:方法重名
当子类的方法名与父类的方法名出现重名时,子类方法需要用到重写。
重写(Override)的定义:当子类与父类出现一模一样的方法的时候(返回值类型,变量名,参数列表都相同),会出现覆盖重写,相当于子类重写实现父类的方法。
说明:
1.子类重写父类方法,需要保证子类的权限大于等于父类的权限。
2.子类仍然可以通过super适用原理的方法。
特殊情况三:构造方法的特殊
子类要调用父类的构造方法时,可使用super();但要保证是在子类构造方法的第一行。
如:
public zi{
super();
}//子类无参构造方法
注意事项:
1.一个子类只可以有一个父类--单继承。
2.一个父类可以有多个子类。
0x02.抽象
定义:
1.没有方法主体的方法称为抽象方法,用abstrct修饰。
2.包含抽象方法的类称为抽象类。
格式:
修饰符 abstrct 返回值类型 方法名(参数列表);
使用:
继承抽象类的子类必须重写抽象方法,否则该类也必须申明为抽象类。
注意事项:
1.抽象类不能创建对象,只有非抽象类可以创建对象。
2.抽象类虽然不可以创建对象,但可以直接调用抽象类中的静态方法。
3.抽象类不一定包含抽象方法,包含抽象方法的类一定是抽象类。
0x03.接口
定义:
接口时java中的一中引用类型,是方法的集合,主要封装了方法,JDK7以前只包含抽象方法,JDK8以后,还包含默认方法和静态方法,JDK9以后,还包含私有方法。
格式:
public interface 接口名称{
......
}
接口中的抽象方法:
接口中的抽象方法前的abstract关键字可以省略。
接口中的默认方法:
使用 default 关键字修饰的,供子类调用和子类重写。
接口中的静态方法:
使用 static 关键字修饰的,供接口直接调用。
接口中的私有方法:
使用 private 关键字修饰,供接口中的默认方法和静态方法调用。
接口的实现:
接口的实现类似于继承,使用 implements 关键字修饰
格式:
class 类名 implements 接口名{
......
}
抽象方法的使用:
非抽象类实现接口,必需重写所有的抽象方法。
通过创建对象来调用实现类的已重写的方法。
默认方法的使用:
既可以继承也可以重写,就是普通的方法。
静态方法使用:
只能使用接口名调用,不能通过对象和实现类调用。
私有方法的使用:
私有方法只有接口中的默认方法可以调用。
私有静态方法只有接口中的默认方法和静态方法可以调用。
接口的多实现:
含义:一个类能实现多个接口,并且还能继承一个父类。
多实现抽象方法使用:
非抽象类多实现时,必须实现所有抽象方法,如果有重名,则只需要实现一次。
多实现默认方法使用:
如果多接口中有默认方法重名,必须重写一次。
多实现静态方法使用:
同名也不冲突,因为只可以通过接口名称调用。
特殊情况:
当实现类的父类的成员方法与接口的默认方法重名,优先执行父类的成员方法。
接口的多继承:
含义:一个接口可以继承多个接口。
如果父类的默认方法重名,子类需要重写一次。
接口的注意事项:
1.接口无构造方法,不能创建对象。
2.接口无法定义成员变量,但可以定义常量,用 public static final 修饰。