1. 重写
- 创建一个子类对象,子类对象调用方法XXX,
①如果子类没有XXX方法就调用父类的方法XXX 方法
②如果子类重写了XXX 方法就调用子类的XXX方法 - 重写规则:
①访问修饰符不能严于父类
②返回值相同或者是其子类
③方法名相同
④参数相同
⑤父类的静态方法不能被重写为非静态方法(静态方法不能被重写),非静态方法不能重写为静态方法
⑥子类可以定义和父类同名的静态方法,用来覆盖父类的静态方法
⑦父类私有方法不能被重写
⑧不能抛出比父类更多的异常
3. @Override 注解
①会校验父类是否含有该方法
②没有注解就不会校验父类是否有该方法
4. 重写 & 重载
名称 位置 访问修饰符 返回类型 方法名 参数
重写 子类 不能严于父类 相同或子类 相同 相同
重载 同类 无关 无关 相同 不同
5. toString();
6. 重写equals
①首先判断对象是否是自己
1. this==obj
②判断参数对象是不是和当前对象是同一个类
- this.getClass().equals(obj…getClass())
- obj instanceof 类名
③将对象强转为当前对象类型
java.lang.ClassCastException:(可能会出现的异常)(第二步必不可少)
④判断对象具体属性值(自定义)
7. cequals() && == 区别
①==
- 如果比较的是基本数据类型,比较的值;
- 如果比较的是引用数据类型,比较的地址;
②equals()
- 如果不被重写,和== 没有区别
- 如果被重写 (看重写的规则是什么)
8. String ss=new String(”aa”); 创建了几个对象?
- 一个或者2个
- 如果字符串常量缓冲区存在aa ,就创建一个
- 如果字符串常量缓冲区不存在aa ,就创建两个对象
2. 多态
①同一个引用类型,指向不同的实例对象执行不同的操作
1. 抽象类,抽象方法
①抽象类,抽象方法用abstract 修饰
②抽象类不可以实例化
③抽象方法没有方法体
④抽象方法只能在抽象类中(有抽象方法的类一定是抽象类)
⑤抽象方法必须被子类实现,除非子类也是抽象类(如果子类也是抽象类,抽象方法可以不实现)
2. 向上转型
①语法
- <父类类型> 引用名 = new <子类类型>();
②父类的引用调用的方法是子类重写父类的方法,或者继承父类的方法
- 如果子类没有XXX方法就调用父类的方法XXX 方法
- 如果子类重写了XXX 方法就调用子类的XXX方法
③父类不能调用子类特有的方法
3. 向下转型
①语法
<子类类型> 对象名= (<父类类型>)引用名;
②向下转型需要强转
③在向下转型中,如果没有转换为真实的子类类型 ,会出现异常
java.lang.ClassCastException: pet.Penguin cannot be cast to pet.Dog
4. 多态的必要条件(步骤)
①继承
②重写
③向上转型
5. java 面向对象的特征
①封装
②继承
③多态(抽象)