黑马程序员-day07-继承
2015-09-30 16:38
330 查看
------- android培训、java培训、期待与您交流! ----------
继承 | extends 父类名称 | 如父类为Person,则子类可以定义为: class son extends Person |
子类继承父类 | 类描述的是对象的属性,将不同的子类的共同属性抽出来,建立的新类就是父类,子类属于父类,父类是其所有子类所具有的共同属性功能。如猫与动物的关系便是子类与父类的关系,而狗也是动物类的一个子类,子类也能有子类,如狗类下面还可以分萨摩类,泰迪类。 | |
益处 | 提高代码复用性;使类与类具备关系,产生多态 | |
注意: | 必须是具有所属关系才使用继承,不能为了获取功能或简化代码而使用继承; java只支持单继承,不支持多继承,支持多层继承 | |
面对类体系方法 | 查看父类功能,了解该功能体系的基本功能与属性,但是建立对象时应建立最底层的子类对象,一是父类可能不支持创建对象,而是创建最底层对象可以使用整个体系的功能 | |
子父类变量特点 | 加载子类class文件之前,虚拟机会先加载父类class文件; 子父类出现同名的非私有变量时,子类引用子类变量使用this,引用父类变量使用super,如果不带this和super,则会默认引用子类变量,如果子类没有重新定义该变量,即使使用了this,依然是引用父类变量 | |
子父类函数特点 | 当子类定义的函数与父类一模一样时,当子类对象调用该函数,会运行子类函数 | |
函数重写 | 当子类具备和父类一样的功能(即函数名相同),但功能的内容不同时,没有必要在子类中定义新功能(代码冗余,子类中有两个几乎一致的功能),也没有必要更改父类的功能,因为牵一发而动全身,此时使用重写功能即可; 当子类功能只是在父类功能基础上增加一些代码时,重写功能时,使用super调用父类功能,再加上需要增加的功能代码即可。 | |
注意事项: | 要重写父类某功能时,须同时满足两个条件,第一,该父类功能不能是私有的(如果私有,子类根本不会继承到该功能,等于不是重写,而是在子类中定义了一个新功能);第二,子类功能的权限需要大于等于父类该功能; 注意静态功能只能覆盖静态功能; 重写时注意返回值类型/参数类型要保持一致; | |
子父类静态代码块特点 | 在创建子类新对象时,java会按照从父类到子类的顺序加载类文件,因此静态代码块最先执行,并且父类优先于子类执行,只有所有等级的静态代码块执行完毕,才会执行构造代码块和构造函数 | |
子父类构造代码块,构造函数特点 | 在按照构造函数(不管是否具备参数)创建子类对象时,会先执行父类中的构造代码块,构造函数,再执行子类中的构造代码块,构造函数,相当于子类构造函数第一行都默认有一条隐形的空参数语句:super()。如果自定义该隐藏代码,如改为super(参数)带参数的形式,则其所属类的直系父类执行相应的构造函数, | |
子类构造函数访问父类构造函数 | 以:super(参数)的形式进行访问;注意super()和this()都只能放在第一行,因此一个构造函数不能同时访问父类构造函数和本类构造函数,但是即使是this,依然会访问到父类构造函数,因为this访问的本类构造函数会至少有一个会访问到父类构造函数; 当父类中没有空参数的构造函数时,必须手动使用super或this带参数来指定父类构造函数 | |
final关键字 | 位置:变量类型、返回值类型前 | 用于修饰类、函数、变量,表示“最终版” |
修饰类 | 此时类不可以被继承,避免功能被复写,提高封装性 | |
修饰功能 | 此时功能不可以被复写 | |
修饰变量 | 此时变量是一个常量,只可被赋值一次,虽然常量值不改变,但是还是需要命名,增加阅读性 | |
常量命名规范 | 全大写字母,单词与单词间用下划线隔开 | |
全局常量 | public static final int X=1 | |
内部类 | 内部类定义在类中局部位置上时,只能访问该局部被final修饰的局部变量 | |
抽象类 | 作用 | 用来根据不同类的功能,抽取其共同的功能定义,而不是功能主体 |
abstract修饰方法 | 被abstract修饰的方法,只声明方法(类型,名称等),不带大括号,以分号结尾,用来被子类复写,比如狗会speak汪汪,猫会speak喵喵,那么这两者的父类(动物)也会speak,但是对于speak具体什么东西是抽象的,没有定义的,因此定义一个抽象方法,用来被子类复写; 注意抽象方法必须放在抽象类中 | |
abstract修饰类 | 被abstract修饰的类,不能够创建实例对象(调取抽象的方法没有意义),抽象类中可以没有抽象方法,用来阻止新建对象(与私有化构造函数相比,抽象类即使在本类中,也无法新建对象) | |
子类重写抽象方法 | 如果子类没有重写父类的所有抽象方法,子类还应该定义成抽象类,只有子类复写了父类所有抽象方法,子类才能创建对象 | |
与一般类区别 | 可以含有抽象方法(不一定非得有),无法实例化 | |
模板方法 | 概念 | 当定义功能时,功能的一部分是确定的,另一部分是不确定的,而确定的部分需要用到不确定的部分,这时就将不确定的部分提供出去,由该类的子类来完成;而将确定的部分用final修饰,以免被复写掉 |
例子:获取一段代码运行的时间 | 一段代码是不确定的,但是获取这个功能时确定的,因此在父类中将要获取时间的代码重新定义为一个新的抽象函数,由子类去复写确定该段代码 | |
接口 | 定义方式 | interface 接口名{} |
默认修饰 | 接口中的变量:public static final 接口中的函数:public abstract 注意,即使接口中定义时不加上这些修饰,也会默认有这些修饰,定义时最好加上这些修饰,更直观 | |
特点 | 不可以创建对象,子类需要将接口所有抽象功能复写,才能实例化 接口是对外暴露的规则,是程序的功能拓展,用来多实现 | |
多实现 | 一个子类可在继承一个类的同时实现多个接口,如: class A extends B implements C,D | |
多继承 | 一个接口可以继承多个接口,如: interface A extends B,C 注意B,C不要创建同名功能 |
相关文章推荐
- 面试算法
- Android 面试题目
- 剑指Offer面试题目:有序二维数组的查找
- 黑马程序员—预处理指令及条件编译
- 百度腾讯面试回忆
- 作为一名程序员你凭什么傲视群雄
- 程序员书单_java web编程篇
- 对程序员非常重要的24个软技能
- 黑马程序员————多线程模拟:多生产者-多消费者
- 一道海量数据处理面试题
- 独立程序员如何赚钱致富
- 黑马程序员——Java基础---IO流概述、字符流、字节流、流操作规律
- 黑马程序员————Java集合详解剖析
- 代码面试之栈和队列(转载)
- 《疯狂的程序员》读后感
- Android面试知识分类
- 程序员在互联网公司和行业软件公司工作,有什么区别?
- 第一阶段面试总结
- 程序员在编程中遇到的奇葩弱智问题
- 马无夜草不肥:程序员做业余项目的重要性