一 继承

  类与类的is a关系,叫做继承

  关键字:extends-继承

  语法: public class 子类名 extends 父类名 {

  效果:父类所以属性行为子类自动具有;java中只有单继承,一个子类只能继承一个父类

  重写:子类把来自于父类的方法覆盖,要求:

                    a.返回类型,方法名,形参列表必须与被重写方法完全一致

                    b.访问修饰符不能比被重写方法小

                    c.不能比被重写方法抛出更多异常

  内存中效果:内存叠加

  父类构造方法不会被继承,但是会参与子类对象创建(如图),在子类new对象时,会先开辟空间创建父类对象,再在次基础上叠加子类部分,形成一个完整的子类对象.

  

  所有的类,包括数组都有一个共同的父类-Object(根类),所以Object中所有属性方法都会出现在所有类身上,比如:

  1.getClass();

  2.hashCode();每个对象在内存里都有一个唯一的哈西值

  3.equals();判断两个对象是否业务相等

  4.clone();克隆

  5.toString();返回一个对象的字符串描述

  6.finalLize();这个方法是由Gc调用,用于销毁对象

  7.wait();等待

  8.notify();唤醒

 

  二 多态

  多态主要指的是方法的多态,一种行为多种实现.

  1.静态多态

  在编译期就能够确定运行期的效果,包括重载和单个的重写

  重载:在同一个类中,允许拥有多个同名方法,但是形参列表在类型,数量,顺序上至少有一处不同.(主要用于相似行为)

  2.动态多态

  在编译期不确定,要等到运气起来以后根据绑定对象不同,有不同的效果.由动态绑定配合重写实现.

  引用类型转型:

        a.向上转换-父类引用指向子类对象(自动转换).

        子类对象里面包括完整的父类对象,所以父类引用指向子类对象不会出现错误,一定成功.但是,父类类型的引用只能访问来自父类的属性,方法.

        b.向下转换-将父类对象交给子类引用(强转).

        在编码时,不会有父类对象交给子类引用存在,因为子类引用所指向的对象是父类对象,是不完整的,运行时会出错.向下转型作用在于,父类引用指向子类对象,但有时候需要访问或者调用子类特有的属性或者方法,这时候就要对父类引用做强转,使子类引用指向子类对象.但是如果不是指向的本类对象的话,还是会运行时出错.这时候就有使用关键字instanceof(boolean型运算符,专门判断引用是否指向某类对象).

  语法: 引用 instanceof 类型,true表示该引用指向该类型的对象,false则表示没有指向该类型对象.

  所以,向下转型实质上是使本类引用指向本类对象.

  三 抽象类与接口

  抽象类是专门用于继承,不能产生对象,只能用于继承;接口是与类有一些相似之处的另一种引用数据类型,用于使没有继承关系的类共享行为.

  命名规范 属性 行为 构造方法 设计原则 继承 实现
抽象类 名词,首字母大写;在类名前修饰abstract-抽象 与普通类一样

抽象方法使用可选修饰符abstract修饰

语法:访问修饰符 abstract 返回类型 方法名(形参列表);

普通方法与普通类没区别

与普通类一样 与生俱来的写入抽象类;抽象类因抽象方法而产生,没有抽象方法的抽象类是没有意义的 单继承,子类必须重写父类的抽象方法,否则子类也是抽象类 没有
接口 通常是xxxable(什么什么的行为);在接口名前修饰 interface-接口 默认为(只能是)公共的静态常量 默认(只能是)公共的抽象方法 没有构造方法 最小接口原则,尽量定义小接口 接口与接口直接存在继承关系,而且是多继承

类可以实现接口,多实现,使用关键字implements,实现类必须重写接口的抽象方法

语法:public class 类名 implements 接口名1,接口名2,接口名3.......{

  

  抽象类是继承的表现;接口更是典型的多态.