代码当中的多态,就是父类引用指向子类对象的意思。安全
格式以下:对象
父类名称 对象名 = new 子类名称();接口
或者io
接口名称 对象名 = new 实现类名称();编译
访问成员变量的两种方法:table
1).直接经过对象名访问成员变量,看等号左边(父类名称 对象名 = new 子类名称();的等号左边)是谁,就优先用谁。ast
2).间接经过成员方法访问成员变量,看方法属于谁,就优先用谁,没有则向上找。class
成员方法的访问规则:new的是谁,就优先用谁,没有则向上找。
口诀:变量
成员方法:编译看左边,运行看右边。权限
成员变量:编译看左边,运行看左边。
不管右边new的时候,换成哪一个子类对象,等号左边的调用方法都不用改变。
向上转型,就是多态写法。
格式:
父类名称 对象名 = new 子类名称();
含义:右侧建立了一个子类对象,把它看成父类来看待使用,例如猫类属于动物类,因此猫的父类就是动物,把具体的一只猫看成动物来看待,就是向上转型。
在向上转型中,必定是安全的。
但向上转型有一个弊端:对象一旦向上转型了,就没法调用子类本来有的内容了。因此须要向下转型,来帮助访问子类本来有的内容。
格式:
子类名称 对象名 = (子类名称) 父类对象;
含义:将父类对象还原成原本的子类对象。
注意事项:
1).向下转型时,必须保证对象原本建立的就是一只“猫”,才能成功向下转型。
2).若是对象建立时不是一只“猫”,如今非要向下转型成为“猫”,就会致使运行报错(编译不会报错,但在运行时会出现异常:Java.Class.ClassCastException,类转换异常)。
在这里,可使用instanceof关键字进行辅助啊判断是否是向下转型。
使用格式:
对象 instanceof 类名称
这将会获得一个布尔值,也就是判断前面对象能不能当作后面类型的实例。
final表明最终的,不可改变的。
常见的用法有:
1).用来修饰一个类。 2).用来修饰一个方法。
3).用来修饰一个局部变量。 4).用来修饰一个成员变量。
当用来修饰类时,格式:
public final class 类名称{ //...}
含义:当前这个类不能有任何子类,但能够有父类。
注意:若是一个类是final类,那么其中全部的成员方法都没法进行覆盖重写。
当用来修饰成员方法时,格式:
修饰符 final 返回值类型 方法名(参数类){方法体}
当final关键字用来修饰方法时,这个方法就是最终方法,也就是不可以被覆盖重写。
注意:
对于类和方法,final关键字和abstract关键字不能同时使用,由于二者本就相互矛盾。
当final关键字修饰局部变量时:
final修饰局部变量后,那么这个变量将不能进行修改,即不可变。
其中,这个“不可变”,对于基本类型来讲,是指变量当中的数值不可变。
对于应用类型来讲,是指变量中的地址值不可变。
当final用来修饰成员变量时:
对成员变量,若是使用final关键字修饰,那么这个变量将不可变。
注意:
1).因为成员变量具备默认值,因此在用了final关键字后必须对成员变量进行手动赋值,不会再给默认值。
2).对于final变量,要么直接赋值,要么使用构造方法赋值,两者选其一。
3).必须保证类当中全部的重载方法都最终会对final成员变量赋值。
public > protected > (default) > private
public | protected | (default) | private | |
同一个类 | √ | √ | √ | √ |
同一个包 | √ | √ | √ | × |
不一样包子类 | √ | √ | × | × |
不一样包非子类 | √ | × | × | × |
注意:
1).对(default),该关键字不是default关键字,而是什么都不写。
2).表格中的√表示能够互相访问,×表示不能互相访问。