继承:实现代码复用
1.单继承,通过extends实现
2.不能继承父类那些东西?
构造方法不能继承
private修饰的不能继承
不在同一个包中的默认的不能继承
3.super可以访问父类的资源
父类的方法,属性,
构造方法: 只能在构造方法中访问父类构造方法。而且访问父类构造方法必须放在第一行
不能直接使用super
4.继承关系下,构造方法执行顺序
父类的静态属性—>父类的静态代码块—>子类静态属性—->子类静态代码块—->父类非静态属性—->父类非静态代码块—>父类构造方法—>子类非静态资源—>子类构造方法
5.抽象类: abstract修饰的类
抽象方法: abstract修饰,抽象方法没有方法体
抽象类不能创建对象
抽象类中的方法不一定都是抽象方法
抽象方法所在的类一定是抽象类
一个类继承抽象的父类,必须实现父类中的抽象方法,除非自己也是抽象类
6.final:
修饰属性:常量
修饰方法:不能被重写
修饰类:不能被继承
7.final修饰方法的时候,能否和abstract同时使用:不能
多态:同一种事物,条件不同,产生的结果也不同
同一种引用类型,使用不同的实例,而执行不同的操作
父类的类型指向的是子类的实例
Pet pet = new Dog();//起作用的是dog
Pet pet = new Penguin();//起作用的是Penguin
使用步骤:
1.有继承
2.子类重写父类的方法
3.父类的类型指向子类的实例
Pet pet = new Dog();//向上转型(类似:自动类型转换)
向上转型后会丢失子类特有的属性与方法
需要向下转型。判断该实例究竟是哪个类的类型
instanceof
pet instanceof Dog:如果pet是Dog的实例,返回true,如果不是返回false
注意:ClassCastException:类型转换异常