Java-封装,继承,多态

封装

get() set() 方法:

set() 方法中可以封装对属性的操作

IDEA快捷键

A/t + insert 可快速生成 get() set() 方法

继承

  1. 在Java中,所有的类都默认直接或间接继承Object类;

  2. 在Java中只有单继承,没有多继承。即一个子类只能有一个父类,而一个父类可以有多个子类;

  3. 子类能够继承父类哪些属性或方法取决于父类的属性或方法的访问范围,即取决于public、private等修饰符;

  4. 父类的引用可以指向子类。

IDEA 快捷键

ctrl + H 查看当前类的继承关系

this super 关键字

重写

  • 重写的方法名必须相同;
  • 重写的方法参数列表必须相同;
  • 方法的修饰符:范围可以扩大但不能缩小;(public>protected>default>private)
  • 抛出的异常范围可以被缩小但不能扩大;
  • 只能是子类重写父类的方法,不能重写属性;
  • 父类的成员方法只能被它的子类重写;
  • 不能重写:声明为final、static类型的方法不能重写,但是static类型的能够再次声明;
  • 重写的方法可以使用**@Override**注解来标识;
  • 子类和父类中的同名同参数的方法要么都声明为非static的(重写),要么都写成static的(不是重写)。

多态

  1. 父类的引用指向子类;

  2. 子类对父类中某些方法进行重写,在调用这些方法时就会调用子类的方法;

  3. 不能调用父类中没有的方法;

  4. 如果子类没有重写父类的方法,则调用父类的方法;如果子类重写了父类的方法,则调用子类的方法;

  5. 对象的多态性只适用于方法,不适用于属性。

第5条注意:

若子父类中都有属性age

父类引用.age的值为父类的age

语法结构:

父类名 父类引用 = new 子类名();

父类引用.子类方法(); —>编译时调用父类的方法,运行时调用子类的方法

多态总结

  1. 方法:编译看左边,运行看右边;

  2. 属性:编译运行都看左边;

  3. 如何使父类对象可以调用子类特有的属性或方法?

    ​ 需要使用强制类型转换,但使用强转时可能出现ClassCastException异常,因此需要用到instanceof关键字

instanceof关键字

a instanceof A:判断对象 a 是否是类 A 的实例;返回 true 或 false

若类 B 是类 A 的父类,若 a instanceof A 返回 ture, 则 a instanceof B 也返回 ture

使用情景:

为了避免在向下转型时出现ClassCastException的异常,我们在向下转型之前,先进行instanceof的判断,一旦返回ture,就进行向下转型,返回false,不进行转型