继承、方法重写和多态
(Alt+shift+s打开source资源编写get、set的调用方法)
子类只能继承一个父类(extends) ,即单根性,
继承具有传递性
(继承是达到了一种代码重用的作用)
super代表了父类对象,只能在子类中使用,super()表示父类构造函数,super.代表调用父类的属性
(如果有super()一定要放在第一句)
在继承体系里的初始化顺序是先创建父类对象再创建子类对象,
一个类里先给属性赋值,构造函数是最后给属性赋值。
执行顺序:(父类的属性->父类的构造函数->子类的属性->子类的构造函数)
(不能继承父类的情况) 1. 子类不能访问父类private成员
2. 子类与父类不在同包,使用默认权限的成员
3. 构造函数(方法)
符合is-a的关系设计
Private (本类)
Friendly默认 (本类、同包)
Protected (本类、同包、子类)
Public (本类、同包、子类、其他)
方法重载:同一个类里的同一方法,方法名一样但参数列表不同
方法重写:在继承关系的子类中,重新定义了父类的某个方法
规则:在继承体系的子类中,重写的方法名、参数、返回值类型必须与父类一致
私有方法不能继承,因而也无法重写。
1、Java中的使用抽象类,限制实例化(无法实现实例化)
(public abstract Person(){},所以就限制了Person的实例化)
抽象方法! @ 没有方法体{}的,仅仅是个声明,定义。 @抽象方法必须放在抽象类里面。 @ 继承了含有抽象方法的抽象类,就必须在子类中重写抽象方法! 除非子类也是个抽象类。
2、Final的用法,类不希望再被其他类继承,or方法不希望被重写,or属性不希望被修改, 是常量。
3、static 可以用来修饰属性、方法和代码块。
Static修饰的属性和方法称为类属性(类变量) 、类方法。
静态的方法,不用声明实例便可以运行
不使用static修饰的方法和属性属于单个对象,通常称为实例属性(实例变量) 、实例方法。
静态属性的初始化就一次(在第一次加载的时候),以后调用就不会再初始化了。
多态:同一个引用类型,使用不同的实例而执行不同的操作。(父类引用子类对象) 使用继承、子类重写父类的方法、父类引用子类、调用重写方法。
引用类型转换:
向上转型:父类引用子类,子类重写父类的方法,用多态
向下转型:强制类型转换,父类转换为子类,用instanceof
Object o= list.get(i);
if(o instanceof Show){
Show s=(Show)o;
s.service();
}