继承与多态,抽象类与接口

向上/向下转型

继承与多态,抽象类与接口

向上转型:Person p = new Student;
将子类型用父类型进行引用(因为子类拥有父类的全部功能,所以安全)

向下转型:Student s = (Student) p; 可能报错ClassCastException

操作符instanceof:在向下转型之前判断,防止报错
可以判断对象是否时某一类型或其子类(是的话都为true);但对象为 null 时总是false

继承和组合

继承是 is 关系
组合是 has 关系

  • 小结
    继承与多态,抽象类与接口

多态(动态调用)

  • 引用变量的声明类型可能与其实际类型不符
  • 实际对象的方法调用总是对应实际类型
  • Java的实例方法调用是基于运行时实际类型的动态调用
    优点:允许添加更多类型的子类实现功能扩展

覆写toString

直接使用 println 打印对象,实际运用了 .toString 方法,打印出其在JVM中的地址
所以需要覆写

final修饰

  • 被修饰的方法:不能被覆写

  • 被修饰的类:不能被继承

  • 被修饰的字段:初始化后不能被修改

  • 小结
    继承与多态,抽象类与接口

抽象类

继承与多态,抽象类与接口

如果父类方法没有实际意义,可以将方法声明为抽象方法,那么这个类也就必然声明为抽象类:

  1. 抽象方法用 abstract 修饰
  2. 抽象方法不需要任何执行语句
  3. 因为无法执行抽象方法,该类必须申明为抽象类
  4. 抽象类不能实例化

调用抽象方法的同时,实现了多态:
继承与多态,抽象类与接口

继承与多态,抽象类与接口
  • 小结
    继承与多态,抽象类与接口

接口

  • 若一个抽象类没有字段,所有方法都是抽象方法,可以把其定义为接口
  • interface 声明一个接口
  • 接口默认定义为public abstra,不用明写
  • 实现 interfa 时,使用 implements ,可以实现多个
    继承与多态,抽象类与接口
    default 方法有自己的返回值,不需要所有子类实现,用到时子类可以对其进行覆写
    继承与多态,抽象类与接口
    继承与多态,抽象类与接口
    继承与多态,抽象类与接口