多态中向上转型和向下转型

这篇博客探讨了Java中的多态性概念,通过实例展示了父类引用指向子类对象的情况。文章解释了向上转型和向下转型的过程,以及它们在代码扩展性和维护性方面的优势。然而,多态性也存在无法直接访问子类特有属性和方法的弊端。示例代码演示了方法重写和调用,以及如何在方法参数中使用多态来增强代码的灵活性。
摘要由CSDN通过智能技术生成
public class sd{
    public static void main(String[] args) {
        Person p = new Superman(); //父类引用指向子类对象,超人提升为i,向上转型

        System.out.println(p.name);
        p.tanshengyi();

        Superman m=(Superman)p;//向下转型
        m.fly();
    }
}
class Person {
    String name="Thon";
    public void tanshengyi() {
        System.out.println("tanshengyi");
    }
}
class Superman extends Person {
    String name="Superman";
    public void tanshengyi() {
        System.out.println("123456");
    }
    public void fly() {
        System.out.println("fly");
    }
}

结果:

内存图: 

 多态的好处和弊端:

        好处:

                提高代码的扩展性(多态保证),维护性(继承保证),可以当作形式参数接收任意子类参数

public class animal {
    public static void main(String[] args) {
 /*       methods(new Cat());
        methods1(new Dog());*/

        methods2(new Cat());
        methods2(new Dog());

    }
/*    public static void methods(Cat c) {
        c.eat();
    }
    public static void methods1(Dog c) {
        c.eat();
    }*/
    public static void methods2(Animal c) {
        c.eat();
    }
}
class Animal {
    public void eat() {
        System.out.println("eat");
    }
}
class Cat extends Animal {
    public void eat() {
        System.out.println("🐟");
    }
    public void catchmouse() {
        System.out.println("老鼠");
    }
}
class Dog extends Animal {
    public void eat() {
        System.out.println("肉");
    }
    public void lookhouse() {
        System.out.println("看家");
    }

}

        弊端:                

                不能使用子类特有的属性和行为

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值