面向对象三大特征:封装性、继承性、多态性
extends继承或者implenments实现,是多态性的前提。
小明是一个对象,这个对象即使,也是..一个对象拥有多中形态。这就是对象的多态性
代码当中体现多态性,其实就是一句话:父类引用指向子类对象
格式:父类名称 对象名= new 子类名称();
或者 接口名称 对象名 = new 实现类名称();
访问成员变量的两种方式:
1.直接通过对象名称访问成员变量 看等号左边是谁,优先用谁.
2.间接通过成员方法来访问成员变量。看该方法属于水,优先用谁,没有则往上找
态中成员方法的使用特点
看new 的是谁,就优先用谁,没有则往上找。
注意:编译看左边,运行看右边
对比一下:成员变量:编译看左边,运行看左边
成员方法:编译看左边,运行看右边
使用多态的好处:无论右边new的时候换成那个子类对象,等号左边调用方法都不会变化。
对象的上下转型:
向上转型:就是多态写法
父类名称 对象名 = new 子类名称();
含义:右侧创建一个子类对象,把它当做父类来看待使用
注意事项:向上转型一定是安全的。是从小范围转向了大范围,但是也有弊端:
对象一旦向上转型为父类,那么久无法调用子类原本特有的内容。
解决方案:用对象的向下转型【还原】
向下转型:格式: 子类名称 对象名 = (子类名称)父类对象;
含义,将弗雷对象还原成为本来的子类对象。
注意事项:必须保证对象本来创建的时候,就是猫,才能向下转型成为猫
如果对象创建的时候本来不是猫,现在非要向下转型成为猫,就会报错
但是不能在猫的时候转换为狗
instanceof 关键字进行类型判断。
如果希望调用子类特有的方法,需要向下转型 䄦才能知道一个父类引用的对象 本来是子类对象
格式 对象 instanceof 类名称
这将会得到一个boolean值结果,也就是判断面的对象能不能当做后面类型的实实例。
向下转型一定要进行instanceof转换
if()
子类名称 对象名 = (子类名称)父类对象
(子类名称).对象
final关键字代表着最终,不可改变
1.可以用来修饰一个类
public final class 类名称{
}
含义 当前这个类不能有任何子类。
一个类如果是final类,那么所有成员方法都无法进行覆盖重写。
2.可以用来修饰一个方法
当final关键字用来修饰一个方法的时候,这个方法就是最终方法,也就是不能被覆盖重写:
格式:
修饰符 final 返回值类型 方法名称{参数列表}
注意事项: 对于类和方法来说 ,abstract关键字和final关键字不能同时进行 因为矛盾。
3.可以用来修饰一个局部变量
一旦使用final用来修饰局部变量,那么这个变量就不能进行改变。
在组中final的引用类型变量,期中的地址值不可改变,但是里面的内容可以增加火减少
4.可以用来修饰一个成员变量
对于成员变量来说,如果final关键字修饰,那么这个变量也照样不可以变
1.犹豫成员变量具有默认值,所以用了final之后必须手动赋值,不会再给默认值李
低于final成员变量,要么通过直接赋值(就是后面加等号)要么通过构造方法赋值。
四种权限修饰符:
public >protected>(default)>pricate
同一个类 YES YES YES YES
同一个包YES YES YES NO
不用包子类YES YES NO NO
不通包非子类YES NO NO NO