day07复习总结
面向对象的特征: 继承
1. 使用extends 建立子类与父类的继承关系
2.子类继承父类相当于子类把父类的功能复制了一份,但注意,构造方法不能被继承.
3.继承后,子类可以使用父类所有非私有资源,私有资源不可用的原因是不可见
4.java只支持单继承,一个子类只能有一个父类,但是一个父类可以有多个子类
关键字 super
- super 可以在父类成员变量与子类成员变量同名时,用super,变量名的方式调用父类的成员变量
- 还可以通过super调用父类的构造方法,子类的构造方法首行默认存在super();表示调用父类的无参构造,如果没有父类的无参构造,需要手动提供父类的其他含参构造供子类调用
- 注意: 只能的构造方法中调用,是被动被触发的,只能在首行中调用.
方法的重写
- 前提:子类继承父类以后,对父类的功能做改进,
- 语法规则: 两同两小一大
两同: 子类的方法与父类方法的方法名 + 参数列表相同
一大: 子类方法的修饰符 >= 父类方法的修饰符
两小: 子类的返回值类型大小 和抛出异常的大小 <= 父类 - 注意: 我们在重写规则中提到的方法的返回值类型的大小,指的不是字节的大小[byte/int] 我们这里指的是说:
比如: 父类是 void 子类是 void
Cat MiaoMiao
关键字 static
- 静态可以修饰变量,方法,代码块
- 被static修饰的资源称作静态资源
- 静态资源属于类资源,随着类的加载而加载,只加载一次
- 静态资源可以被类名直接调用,原因是因为静态资源优先于对象加载
- 静态资源被全局对象共享,只有一份
- 静态只能调用静态
- 静态代码块static{}
位置: 类里方法外
执行时机: 类加载时就加载,而且只会加载一次
作用: 初始化,只用于加载那些需要第一时间就加载,而且只加载一次的资源 - 代码块的执行顺序 静态代码块 构造代码块 构造方法 局部代码块
先静态 后普通 先父类 后子类
关键字 final
final 表示最终,可以修饰
9. 被final修饰的类是最终类 ,不可以被继承
10. 被final修饰的方法时方法的最终实现,不可以被重写
11. 被final修饰的"变量"其实是常量,值不可以被修改,而且常量定义是必须被赋值
package cn.tedu.oopextends;
/**
* 本类用于测试继承中成员变量的使用
* @author ZHU
* @create 2021/8/9 11:13
*/
public class TestExtend1 {
}
class Father{
}
class Son extends Father{
int sum = 100;
public void eat(){
int sum = 10;
System.out.println(sum);
System.out.println(this.sum);
}
}
package cn.tedu.oopextends;
/**
* 本类用于测试继承中构造方法的使用
* @author ZHU
* @create 2021/8/9 11:31
*/
/**
* 子类创建对象时,默认会先调用父类的构造方法
*/
/**
* 原因是由于子类构造函数的第一行默认存在super() -- 表示调用父类的无参构造
*/
public class TestExtends2 {
public static void main(String[] args) {
Father2 f2 = new Father2();
Son2 s2 = new Son2();
}
}
class Father2{
public Father2() {
System.out.println("woshi f2de wucan");
}
}
class Son2 extends Father2{
public Son2() {
System.out.println("woshi s2 de wucan");
}
}
package cn.tedu.oopextends;
/**
* 方法的重写 本类用来测试继承中方法的使用
* @author ZHU
* @create 2021/8/9 14:07
*/
/**
* 重写的语法规则: 两同两小一大
*
* 一大: 子类方法的修饰符范围 >= 父类方法的修饰符范围 -- 指的是访问修饰符
* 两同: 方法名相同,参数列表相同,
* 两小: 子类方法的返回值类型 <= 父类方法的返回值类型
* 子类方法抛出的异常类型 <= 父类方法抛出的异常类型
* 注意: 如果父类方法的返回值类型是void,子类保持一致即可.
* 注意: 子类不可以重写父类的私有方法,还是因为不可见.
*/
public class TestExtends3 {
public static void