1. 访问成员变量
看等号左边是谁就先用谁的变量
public class Demo01Multi {public static void main(String[] args) {Fu zi = new Zi();zi.num//优先使用父类的 如果不存在的话 继续往上找}}
2.访问成员方法
看是谁new的,就优先用谁,没有则向上找。
成员变量: 编译看左边,运行还是看左边
成员方法: 编译看左边,运行还是看右边
对象的向上转型其实就是多态的写法:
父类名称 变量名 = new 子类名称();
Animal animal = new Cat();
含义:
右边创建一个子类对象,相当于父类来看
注意事项:
由下往上很安全:类似与 基本数据类型之间的强制转换
这个是动物类
package com.tjs.day10.demo09;/*** @data 16:12*/public abstract class Animal {public abstract void eat();}
这个是猫-继承动物类
package com.tjs.day10.demo09;public class Cat extends Animal{@Overridepublic void eat() {System.out.println("猫吃肉");}}
实例对象
package com.tjs.day10.demo09;/*** @data 16:14*/
public class Demo09Mult {public static void main(String[] args) {Animal animal = new Cat();animal.eat();}
}
输出的是:
对象向下转型,其实是一个还原的动作;
格式:
(子类名称) 对象名 = (子类名称) 需要转换的对象名;
例: Cat cat = (Cat) animal;
含义:
将父类对象,还原成本来的子类对象
注意事项:
a. 必须保证对象还原的是创建时候的类,如:猫 , 才能转换为猫 而不是狗,等等
b. 如果对象创建的时候不是猫,还原时还原成猫–编译的时候不报错 运行的时候报错
ClassCastException
在向下转型时需要判断原本是什么类
实现代码如下:
package com.tjs.day10.demo09;/*** @data 16:14*/
public class Demo09Mult {public static void main(String[] args) {Animal animal = new Cat();//定义一只猫//向下转型if(animal instanceof Cat){Cat cat = (Cat) animal;cat.sleep();}if(animal instanceof Dog){Dog dog = (Dog) animal;dog.cathHome();}giveMeAPet(new Dog());}public static void giveMeAPet(Animal animal){//用处if(animal instanceof Cat){Cat cat = (Cat) animal;cat.sleep();}if(animal instanceof Dog){Dog dog = (Dog) animal;dog.cathHome();}}}
当中演示了多态的用法,比如女朋友需要一只动物不管是什么动物都可以,
然后传入一只狗进去用instanceof,判断是否原本子类是否是狗。
本文发布于:2024-01-30 20:31:47,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170661791022643.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |