因为河南疫情,停课一周,所以今天是在厨房学习
多态
多态
型)意思是
你看这个
Animal a=new cat();
Animal是父类,cat是子类,把父类引用指向子类对象
父类在上面,子类在下面
就类似于
把子类升级到父类了 把父类引用指向子类,
就相当于向上转了
调用方法规则
1、可以调用父类中的所有成员
2、但是不能调用子类中的特有成员(因为在编译阶段,能调用哪些成员是有变异类型来决定的)
3、最终运行效果看子类(运行类型)的具体实现,按照从子类(运行类型)开始查找方法,然后调用,子类没有找父类,父类没有找爷爷类
向下转型
Car cat=(Cat) anmial;
作用和直接创建cat对象一样,但是好处强转不用开辟新对象,创建cat的话,父类引用anmial指向的子类对象就浪费了
就是强制将一个指向子类对象的父类引用,传递给匹配子类对象的子类引用
访问属性看编译类型
动态绑定机制
1、当调用对象方法的时候,该方法会和该对象的内存地址/运行类型绑定
2、当调用对象属性时,没有动态绑定机制,那里声明哪里使用
3、先搞懂静态是干嘛的
静态的定义:某些特定的数据在内存空间中只有一份,类似于共享,就是中国人对象都有一个国籍叫中国
静态变量 就是类变量
静态的使用:用static 修饰的成员变量一般用 类名.成员名 来修饰
静态使用的注意事项:
1、
5、1.静态的方法中不能使用this关键字。super关键字
6、开发中,如何确定一个方法是否要声明为static
1.操作静态属性的方法,通常设置为static 不然就要new一个对象,然后对象.方法
2.工具类的方法,比如Math.pi pi是静态量,Math就是类名
4、父类是形参 子类是实参 这里我还是没看懂,粗略的理解为形参指向了实参,先这样吧
懂了 父类是形参,子类是实参 说白了就是 形参=实参 和 父类引用指向子类对象那个一样
instanceof 这个是对比是不是父对象的
多态数组:为什么 父类引用可以指向子类数组 数组是地址,我也不太明白
数组里面放的是对象引用
对象数组
抽象
1、父类具有不确定性,就是你之前写的那些没有用的 父类方法, 比如动物吃,反正后面都需要方法重构的那种
2、考虑将该方法设计为抽象(abstract)方法
3、所谓抽象方法就是没有实现的方法
4、当一个类中存在抽象方法时,需要将该类声明为abstract类
5、一般来说,抽象类会被继承,有其子类实现抽象方法
6、用abstract关键字修饰一个类时,这个类就叫抽象类
访问修饰符 abstract 返回类型 方法名(参数列表)
没有方法体
7、抽象类的价值更多作用是在于设计,是设计者设计好后,让子类继承并实现抽象类
8、抽象类,是考官比较爱问的知识点,在框架和设计模式使用较多
注意事项
1、抽象类不能被实例化
2、抽象类不一定要包含abstract方法,也就是说抽象类可以没有abstract方法,但是反过来不行
3、一旦类包含了abstract方法,则这个类必须声明为abstract
4、abstract只能修饰类和方法,不能修饰属性和其他的
5、抽象类本质还是类,抽象类可以有任何成员,比如:非抽象方法、构造器、静态属性等等
6、抽象方法不能有主体,即不能实现
7、如果一个类继承了抽象类,则它必须实现抽象类的所有抽象方法,除非它自己也声明为abstract类
8、抽象方法不能使用private、final、static来修饰,因为这些关键字都是和重写想违背的
加油啊,晚上看了嘉然,现在估计要熬夜了,今晚肝到2点也要把抽象和接口看完了
接口
1、interface 接口名{
属性
方法(1.抽象方法 2.默认default方法 3.静态方法)
}
class 类名 implements 接口{
自己属性
自己方法
必须实现接口中的所有抽象方法
}