黑马程序员-day07-继承

------- 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不要创建同名功能


你可能感兴趣的:(java学习笔记)