java多态

本文深入探讨了Java中的继承与多态概念,通过具体的代码示例解释了如何将子类对象赋值给超类变量,以及如何进行向下转型来访问子类特有的方法。同时,文章还展示了如何在子类中重写父类方法,并使用super关键字调用父类的实现。

设Animal(动物)是超类 ,Dog(狗)是子类

一.   可以将一个子类对象赋给超类变量

写法一:

Animal  animal=new Animal();

Dog  dog= new Dog();

animal = dog;     //(boss是子类) 注意赋值是右传左

 写法二:

Animal  animal = new Dog();

二.  然而不能将超类的引用赋值给子类变量

Dog  dog= new Animal();

所有狗都是动物,但动物并不一定是狗。

三.例子:

 Animal  animal = new Dog();

animal 将直接调用父类的方法,当然如果子类重写了父类的方法,那么调用的就是子类的方法!

这条语句的好处是有多个子类时,不用每个子类去写一个相同方法,直接父类中写一个就行了。

坏处就是animal 不能调用子类中有而父类中没有的方法(即子类特有的方法)

那么应该怎么办呢?向下转型

 Animal animal=new Dog();

animal.eat();      //子类重写
animal.wangwang(); //父类独有

/*判断是否可以转型*/
if (animal instanceof Dog){
     System.out.println(true);
     //animal向下转型为dog
     Dog dog = (Dog)animal;
     dog.game();  //子类独有
     dog.eat();   //子类重写
}

用这个dog 对象去调用子类特有的方法!!!

当子类对象调用重写的方法时,调用的是子类的方法,而不是父类中被子类重写的方法。

要想调用父类中被子类重写的方法,则必须使用关键字 super

public class Animal {
    public String name = "小白";
    public void eat() {
        System.out.println("动物吃饭");
    }
    public void wangwang() {
        System.out.println("动物叫");
    }
}



public class Dog extends Animal{
    public int age = 20;
    @Override
    public void eat() {
        System.out.println("小狗吃饭");
    }
    //特有
    public void game() {
        System.out.println("小狗玩游戏");
    }

    public void fathereat() {
       super.eat();
    }


    public static void main(String[] args) {


        Animal animal=new Dog();
        System.out.println(animal.name);
//        System.out.println(animal.age);


        animal.eat();      //子类重写
        animal.wangwang(); //父类独有
        /*判断是否可以转型*/
        if (animal instanceof Dog){
             System.out.println(true);
             //animal向下转型为dog
             Dog dog = (Dog)animal;
             dog.game();  //子类独有
             dog.eat();   //子类重写
             dog.fathereat();//使用super调用父类eat
            System.out.println(dog.age);
            System.out.println(dog.name);
        }


    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值