多态数组:数组的定义类型为父类类型,里面保存的实际类型为子类类型
例:Person arr[]=new Person[5];person[1]= new Student(19,"jack"),父类的引用可以指向子类的对象
此时无法使用子类的特殊方法,因为是运行类型,如果想用子类特有的方法,应该对该成员向下转型(此时需要结合instanceof 进行类型的判断)
多态参数:
方法定义的形参类型为父类类型,实际参数为子类类型 ,即父类形参可以接收子类实参
super代表父类的引用,用于访问父类的属性,方法,构造器
1、可以访问父类的属性,但不能访问父类的private属性
语法 :super.属性名
2、可以访问父类的方法,但不能访问父类的私有方法
语法:super.方法名();
3、访问父类的构造器 、
语法 :super(参数列表)
使用的注意事项:
1、调用父类构造器的好处:分工明确,父类属性由父类初始化,子类的属性由子类初始化
2、当子类中有和父类中的属性和方法重名时,为了访问父类的成员,必须通过super,如果没有重名,使用super ,this 直接访问的效果是一样的
方法重写(覆盖)
基本介绍:方法覆盖指子类的一个方法和父类的某个方法的返回类型,名称,参数一样,我们就说子类的这个方法覆盖了父类的方法 (即只有内容不同)
子类方法的返回值类型和父类方法的返回值类型一样,或者是父类返回值类型的子类
如父类中有public Object getinfo(){} 子类中有public String getinfo(){} ,可以构成方法重写
子类方法不能缩小父类的访问权限
属性没有重写,其大小直接看编译类型