记:OneNote真香!!!!贼好用!!!
- 继承性
- 提高代码复用性,便于功能的扩展,为多态性的使用提供了前提
- 格式:class A extends B { } A是子类或派生类,B是父类或基类,子类A中获取了父类B中声明的所有的属性、方法;特别的父类中声明为private的属性或方法,子类继承父类以后,仍然认为获取了父类中四有的结构,只是因为封装性的影响,使得子类不能直接调用父类的结构。
- 子类继承父类以后,还可以声明自己特有的属性或方法,实现功能的扩展。
- 继承性的有关规定:
- 子类直接继承的类称为直接父类,间接继承的父类称为间接父类。子类拥有直接父类和间接父类中声明的属性和方法
- 如果没有显式的声明一个类的父类,则此类继承与java.lang.Object类,所有的java类都直接或间接继承于java.lang.Object类
- 方法的重写:
- 子类继承父类后,可以对父类中同名同参数的方法进行覆盖操作
- 重写以后,当创建子类对象后,通过子类对象调用子父类中的同名同参数方法时,实际执行的是子类重写父类的方法
- 重写的规定:
- 子类重写的方法的方法名和形参列表与父类被重写的方法的方法名和形参列表相同
- 子类重写的方法的权限修饰符不小于父类被重写的方法的权限修饰符
- 特殊:子类不能重写父类中声明为private权限的方法
- 返回值类型:
- 父类返回值类型是void,则子类也只能是void
- 父类返回值类型是A类型,则子类重写的方法返回值类型可以是A类型,也可以是A类的子类,例如Object和String
- 父类返回值类型是基本数据类型,则子类重写的方法的返回值类型必须是相同的基本数据类型
- 子类重写的方法抛出的异常类型不大于父类方法抛出的异常类型
- 子类和父类中的同名同参数的方法要么都声明为非static的(考虑重写),要么都声明为static(不能重写)
- 四种访问权限修饰符
- 关键字:super
- 理解为父类的,可以用来调用属性、方法、构造器
- 在子类的方法或构造器中,通过使用super.属性或super.方法的方式,显式的调用父类中声明的属性或方法,通常习惯省略
- 特殊情况:当子类和父类中定义了同名的属性时,想要在子类中调用父类中声明的属性,则必须是显式的使用super.属性的方式,(子类不会覆盖父类的属性,方法会有重写)
- 特殊情况:当子类重写了父类中的方法后,在子类中调用父类中的方法时,必须显式的使用super.方法的方式
- super调用构造器
- 在子类的构造器中显式的使用super(形参列表)的方式,调用父类中声明的指定的构造器
- Super(形参列表)的使用,必须声明在子类构造器的首行
- 在类的构造器中,针对于this(形参列表)和super(形参列表)只能二选一,不能同时出现
- 在构造器的首行,没有显示声明this(形参列表)和super(形参列表),则默认调用的是父类中空参的构造器:super()
- 在类的多个构造器中,至少有一个类的构造器使用了super(形参列表),调用父类中的构造器
- 多态性(对象的多态性)eg:Person p = new Man();Man是Person的子类,即父类的引用指向子类的对象
- 多态的使用:当调用父类同名同参数的方法时,实际执行的是子类重写父类的方法------虚拟方法调用(子类独有的方法不能调用)
- 虚拟方法调用:在编译的时候,只能调用父类中声明的方法;但在运行的时候,实际执行的子类中重写父类的方法
- 编译看左边,运行看右边
- 多态性的使用前提:
- 类的继承关系
- 有方法的重写
- 对象的多态性,只适用于方法,不适用于属性(属性的编译和运行都看左边)
- Instanceof关键字的使用
- 有了对象的多态性以后,内存中实际上是加载了子类特有的属性和方法,但是由于变量声明为父类类型,导致编译时只能调用父类中声明的属性和方法,子类特有的属性和防范不能调用,
- 如何调用子类特有的属性和方法:使用强制类型转换 Man m=p;(可能会出现异常 ClassCastException)
- 避免出现上述问题,可以使用关键字instanceof:a instanceof A:判断对象a是否是类A的实例,如果是返回true,否则返回false
- Object类的使用
- Object是所有类的根父类,如果在类的声明中未使用extends指出其父类,则默认为Object类
- Object类中的功能(属性、方法)就具有通用性
- Object类只声明了一个空参构造器
- 单元测试
- 包装类的使用
- toString的使用:
- String Date File 包装类等都重写了Object类中的toString()方法,使得在调用对象的toString方法时,返回实体内容,而不是地址值。自定义类也可以重写toString方法,当调用此方法时,返回对象的实体内容