网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
多态的向上转型
Q:什么是多态的向上转型?
**A:**父类的引用指向子类的对象叫做向上转型。
Q:向上转型的怎么写?
**A:**父类类型 引用名 = new 子类类型();
Q:向上转型有什么特点?
**A:**编译类型看左边,运行类型看右边。可以调用父类中的所有成员。最终运行效果看子类的具体实现。
案例
//动物类,拥有一个call()方法
class Animal {
public void call() {
System.out.println("动物叫!");
}
}
// 狗类,实现父类动物,并重写call()方法
class Dog extends Animal {
public void call() {
System.out.println("汪汪!");
}
public void color() {
System.out.println("狗狗颜色!");
}
}
// 猫类,实现父类动物,并重写call()方法
class Cat extends Animal {
public void call() {
System.out.println("喵~");
}
public void color() {
System.out.println("猫猫颜色!");
}
}
//测试类
public class Test {
public static void main(String[] args) {
//向上转型
Animal animal = new Dog();
animal.call();
animal = new Cat();
animal.call();
}
}
这里 Animal animal = new Dog();
将子类对象Dog
转化为父类对象Animal
,这个时候Animal
引用指向的是子类对象,所以调用的方法是子类方法。
向上转型时,子类单独定义的方法会丢失。比如,上面案例中的Dog
类和Cat
类都定义了自己的call
方法,当进行了向上转型后,Animal
引用指向Dog
类的实例时是访问不到color
方法的,Animal.color()
会报错。
多态的向下转型
Q:什么是多态的向下转型?
**A:**子类引用指向父类对象(父类型,实例是子类的实例化)叫做多态的向下转型。通常需要进行强制类型转换。
案例
//动物类,拥有一个call()方法
class Animal {
public void call() {
System.out.println("动物叫!");
}
}
// 狗类,实现父类动物,并重写call()方法
class Dog extends Animal {
public void call() {
System.out.println("汪汪!");
}
public void color() {
System.out.println("狗狗颜色!");
}
}
// 猫类,实现父类动物,并重写call()方法
class Cat extends Animal {
public void call() {
System.out.println("喵~");
}
public void color() {
System.out.println("猫猫颜色!");
}
}
//测试类
public class Test {
public static void main(String[] args) {
//向上转型
Animal animal = new Dog();
//向下转型
Dog dog = (Dog)animal;//向下转型,强制类型转换
dog.color();//输出狗狗颜色!
Cat cat = (Cat)animal;//报错
Animal animal = new Animal();
Dog dog = (Dog)animal;//报错
}
}
这里需要注意Dog dog = (Dog)Animal;
可以正常运行,是因为dog
本身就是Dog
对象,可以正常转型为Dog
,而不能转型为Cat
。aniaml
类是Animal
对象,他也不能向下转型成任何子类对象。
总结一下: |
1)向下转型的前提是父类引用指向的是子类对象,也就是说,向下转型之前,它得先进行过向上转型。
2)向下转型只能转型为本类对象。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
数据知识点,真正体系化!**
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新