面向对象--多态--多态的习题

多态的习题

/*
        多态的练习:
            猫狗案例

*/
class Animal2{
    public void eat(){
        System.out.println("吃饭");
    }
}

class Dog2 extends Animal2{
    @Override
    public void eat() {
        System.out.println("狗吃肉");
    }

    public void lookDoor(){
        System.out.println("狗看门");
    }

}

class Cat2 extends Animal2{
    @Override
    public void eat() {
        System.out.println("猫吃鱼");
    }

    public void catchMouse(){
        System.out.println("猫抓老鼠");
    }
}

public class PolymorphicTest1 {
    public static void main(String[] args) {
        Animal2 a = new Dog2();
        a.eat();
      //多态不能使用子类的特有方法
//        a.lookDoor();
      
        System.out.println("-----------------");
      
     //通过向下转型使用子类的特有方法
        Dog2 d = (Dog2)a;
        d.eat();
        d.lookDoor();
      
        System.out.println("------------------");
      
      //可以直接赋值,因为a是Animal2类型的
      //相当于Animal2 a = new Cat2();
      //将new Cat2()地址值赋给a
        a = new Cat2();
        a.eat();
      //多态不能使用子类的特有方法
//        a.catchMouse();
      
        System.out.println("------------------");
      
      //通过向下转型使用子类的特有方法
        Cat2 c = (Cat2)a;
        c.eat();
        c.catchMouse();
      //动物和猫之间转换与狗没关系
//        c.lookDoor();

        System.out.println("------------------");
      //写反了
//        Dog2 dog2 = new Animal2();
      //这个很显然不行
//        Dog2 dog2 = new Cat2();
      //狗和猫没有继承关系,类型转换异常
//        Dog2 dog2 = (Dog2)a;
//        dog2.eat();
    }
}
/*
    不同地方饮食文化不同的案例
        Person
            eat()
        SouthPerson
            eat()
        NorthPerson
            eat()
*/

class Person{
    public void eat(){
        System.out.println("吃饭");
    }
}

class SouthPerson extends Person{
    @Override
    public void eat() {
        System.out.println("吃米饭");
    }

    public void work(){
        System.out.println("创业");
    }
}

class NorthPerson extends Person{
    @Override
    public void eat() {
        System.out.println("吃面食");
    }

    public void bath(){
        System.out.println("搓澡");
    }
}

public class PolymorphicTest2 {
    public static void main(String[] args) {
        Person p = new SouthPerson();
        p.eat();
      //多态不能访问子类中特有的方法
//        p.work();
        System.out.println("-------------------");
      //向下转型访问子类中特有的方法
        SouthPerson sp = (SouthPerson)p;
        sp.eat();
        sp.work();

        System.out.println("-------------------");
      //将new NorthPerson()地址值赋给p
        p = new NorthPerson();
        p.eat();
      //多态不能访问子类中特有的方法
//        p.bath();
        System.out.println("--------------------");
      //向下转型访问子类中特有的方法
        NorthPerson np = (NorthPerson)p;
        np.eat();
        np.bath();
    }
}
/*
    看程序,写结果
*/

class Fu {
    public void show() {
        System.out.println("fu show");
    }
}

class Zi extends Fu {
    public void show() {
        System.out.println("zi show");
    }

    public void method() {
        System.out.println("zi method");
    }
}

public class PolymorphicTest3 {
    public static void main(String[] args) {
        Fu f = new Zi();
      //多态访问成员变量的特点
//        f.method();

        //向下转型
        Zi z = (Zi)f;
        z.method();
    }
}
/*
        看程序写结果
*/

class A1 {
    public void show() {
        show2();
    }

    public void show2() {
        System.out.println("我");
    }
}

class B1 extends A1 {

    //这里隐含了继承过来的show方法,只不过我们没有重写
//    public void show() {
//        show2();
//    }

    public void show2() {
        System.out.println("爱");
    }
}

class C1 extends B1 {
    public void show() {
        super.show();
    }

    public void show2() {
        System.out.println("你");
    }
}

public class PolymorphicTest4 {
    public static void main(String[] args) {
        A1 a = new B1();
      //调用B1的show方法B1里没有,但是继承了A1的show方法
        a.show(); // B1 爱
      
      //多态创建对象
        B1 b = new C1();
      //多态访问成员方法的特点
        b.show(); //C1 你
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值