Java 多态
刚学完,记录一下,做个笔记
多态的定义
用起来还是比较简单的:
1 2
| 父类名称 对象名 = new 子类名称(); 接口名称 对象名 = new 实现类名称();
|
原本使用子类或父类的时候,是左右都是子类或者父类名称,这里把左边的名称换成了父类名称
定义很简单,理解后用起来也很简单
子类与父类的变量重名
- 直接通过对象名称访问成员变量,等号左边是谁,优先用谁,没有则向上找
- 间接访问成员方法访问成员变量,看方法属于是,优先用谁,没有则向上找
1 2 3 4 5 6
| public class father { int num = 10; public void show(){ System.out.println(num); } }
|
1 2 3 4 5 6 7
| public class child extends father{ int num = 20; @Override public void show(){ System.out.println(num); } }
|
1 2 3 4 5 6 7
| public class test{ public static void main(String[] args){ father obj = new child(); System.out.println(obj.num); obj.show(); } }
|
①处会输出父类的10,而不是子类的20,因为多态是实例化一个子类,但把它当做父类来看,所以num用的是父类里的值
②处会输出子类的20,因为子类对父类的show方法进行了重载,优先使用本类的成员变量,如果没有则向上找
多态方法的使用
1 2 3 4 5 6 7 8 9
| public class father { public void method(){ System.out.println("父类的方法"); }
public void methodFu(){ System.out.println("父类特有的方法"); } }
|
1 2 3 4 5 6
| public class child{ @Override public void method() { System.out.println("子类方法"); } }
|
1 2 3 4 5 6 7 8
| public class test{ public void main(String[] args){ father obj = new child();
obj.method(); obj.methodFu(); } }
|
obj是父类的东西,但是是由子类new出来的,obj可以使用父类的方法,子类重写了才会在子类中实现,父类中没有的,子类中定义的,obj会找不到
多态的转型
向上转型,就是多态的写法
格式:
1
| Father obj = new Child();
|
创建一个子类对象,把它当做父类来看待使用
向上转型一定是安全的
实例:
创建一个猫的子类对象,把它当做动物对象来看待
向下转型类似于数据类型的强制类型转换
格式:
向下转型,其实是一个还原的动作
比如实例了一只猫,把它当做动物看,但猫能干的事动物未必能干,所以要把这个猫还原为猫对象
实例:
1 2 3 4
| Animal cat = new Cat();
Cat mao = (Cat) cat; mao.catMouse();
|
Java 多态刚学感觉好难,但仔细想了一下,思绪理通一下,就差不多理解了
理解了自己之前不懂的东西好有成就感啊 ヾ(≧▽≦*)o