java多态

在说多态前,写记录下关于重载与重写的区别。

重载:
方法名字相同,但是方法参数不同(①参数个数不同,参数类型不同),方法重载并不关心返回值的类型,也就是说返回值的类型对方法重载没有影响。


方法重写
子类重写父类中的方法,两个方法的返回值类型一样,方法名一样,参数一样,这样的子类方法与父类中的方法构成了重写关系。


重载发生在一个类的内部,而重写则是在父子类的继承。如果子类方法与父类方法中的某个方法同名,但是参数类型不一样,这样不叫重写,而是叫重载,因为子类继承父类,那么父类有的方法,子类也有,因此构成重载。


多态:
父类形引用可以指向子类对象,或者是接口类型的引用可以指向实现该接口的类的示例对象。多态是一种运行期行为而非编译期行为。

可以看代码:

public class PolymorphicTest {
    public static void main(String[] args) {
        //这是就一种多态,即父类引用可以指向子类对象。
        Animal animal = new Dog();
        animal.eat();
    }

}

class Animal{
    public void eat() {
        System.out.println("动物需要吃食物");
    }

}

class Dog extends Animal{
    /**
     * 子类中重写了父类的方法
     */
    public void eat() {
        System.out.println("狗爱吃骨头");
    }
}

运行结果为:

狗爱吃骨头

需要注意的是,使用多态调用方法时,首先要检查父类中是否有这个方法,如果没有的话,则会编译出错,如果有则再去调用子类的方法。

如果把子类的eat方法注释掉以后:

public class PolymorphicTest {
    public static void main(String[] args) {
        //这是就一种多态,即父类引用可以指向子类对象。
        Animal animal = new Dog();
        animal.eat();
    }

}

class Animal{
    public void eat() {
        System.out.println("动物需要吃食物");
    }

}

class Dog extends Animal{
    /**
     * 子类中重写了父类的方法
     */
//  public void eat() {
//      System.out.println("狗爱吃骨头");
//  }
}

结果为:

动物需要吃食物

之所以出现的是父类中的eat方法,是因为子类继承了父类,子类也就有了这个eat方法。

如果只把父类中的eat方法注释掉,编译是就会报错

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
    The method eat() is undefined for the type Animal

强制类型转换有两种:

  • 向上类型转换,如子类转父类,则不需要用括号强制标出。
  • 向下类型转换是,如果父类引用指向子类对象,那么如果想要将父类引用转换为对应的子类引用的话,需要使用括号强制表示出来。
    例如:
Animal animal = new Dog();
Dog dog = (Dog)animal;
dog.eat();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值