继承: 继承一般指晚辈从父辈那里继承财产,也可以说是子女拥有父母所给与他们的东西。继承是子类拥有父类的非私有成员,使用关键字extends来指明父类.
[修饰符] class子类名extends父类名
继承使用原则:
子类可以继承同包中由默认修饰符修饰的成员
子类不能继承被声明为private的成员
如果子类声明了与父类同名的成员变量,则子类隐藏了父类的成员变量
如果子类声明了一个与父类同名的方法,则称子类的成员方法重写(覆盖)父类的成员方法.
super: 父类指针, 子类中访问父类中被子类隐藏的成员时使用.
super可以掉用父类的构造函数: super([参数列表])
多态: 重载(编译时多态),重写(运行时多态).
重载: 方法名相同,参数个数,或者参数类型不同.
注意:方法返回值类型不能作为区分重载的标志.
重写(覆盖):子类方法名与父类的方法相同,称子类覆盖了父类的方法.
注意:子类不能覆盖父类中声明为final和static的方法
子类必须覆盖父类中声明为abstract的方法
子类覆盖父类中的方法,那么子类方法声明必须和父类一样.
向上转型:父类对象引用子类对象实体
注意:向下转型会出现问题,不安全,不建议使用.
抽象类: 抽象类不能被实例化,在定义抽象类时, class前加上abstract.
抽象方法: 抽象方法只有方法的声明,没有方法的实现.
注意:抽象方法不能使用private或static关键字修饰,只要有抽象方法,就一定要声明为抽象类.
抽象类的构造器不能用于创建实例,主要用于被子类调用.
final:
final可以修饰变量(成员变量,局部变量),被final修饰的变量表示不可改变.
final可以修饰引用类型,被final修饰的引用类型表示该引用类型指向的地址不可以改变,但是地址引用的对象实体是可以改变的.
注意: String, Math,包装类是final类,也称为顶级类.
使用final修饰的方法是不可以被重写的。
内部类: 成员内部类,局部内部类, 静态内部类,匿名内部类.
匿名内部类:
匿名内部类可以继承父类的方法, 也可以重写父类的方法.
匿名内部类可以访问外嵌类的成员, 匿名类中不能声明静态变量和静态方法.
使用匿名类时, 必须在某个类中使用匿名类创建对象.
使用匿名类时, 直接使用父类的构造方法.
接口: 接口是特殊的抽象类,接口中的方法全部是抽象方法,接口中的变量全部都是静态常量,接口用implements实现.
注意:接口可以被接口继承,一个接口可以多继承接口,类实现接口可以多实现.
如果多个接口中定义的常量名冲突,则使用接口名.常量解决冲突.
接口与抽象类:
接口与抽象类都不能被实例化
子类必须实现接口中的方法, 必须重写抽象类中的抽象方法.
接口制定了个模块间的标准, 体现的是一种规范.
抽象类作为多个子类的父类, 体现一种模板式的设计.
注意:接口中不能定义静态方法,只能定义静态常量
抽象类中可以定义静态常量
接口中不能包含构造函数,抽象类中可以
抽象类具有类的属性
接口回调: 接口变量可以存放实现该接口子类的对象的实例,即存放对象的引用.
使用接口实现程序设计可以实现“开闭原则”,即对扩展开放,对修改关闭.