多态的基础知识总结

多态 
1.什么是多态
简单的说可以理解为某一类事物的多种存在形态。

举个例子说一下吧:

class Animal{
    String color;
    public void eat(){
        System.out.println("吃东西")
    }
}
    class Dog extends Animal{
    public void eat(){
        System.out.println("边汪汪的叫,边吃东西")//重写

,
                        //当子类不想用父类中继承的eat()

方法,这时候可以重写eat()方法
    }
}


比如说有一个Animal类,一个Dog类,Dog类继承了Animal类,现在我们可

以从两个方面来看Dog,即
    可以把它当做Dog,也可以把它当做Animal,所以说现在Dog类可以有两种存在形式

;





2、对象多态的前提(要记住)

    A:类与类(或接口)要有继承(或实现)关系。
    B:一定要有方法的重写。
        C:一定要有父类或者接口的引用指向子类的对象。(Animal a=new Dog

)


3、多态思想:可以指挥同一类型的一批对象做事情。
    多态的出现让我们复杂的问题简单化了。

4、多态中成员的特点:

    A:成员变量:编译和运行都看父类。


    B:非静态方法:编译看父类,运行看子类。(重点,今天考试考到好几

个)
        比如:Animal a=new Dog;
            a.eat();
        这句代码编译的时候首先看父类有没有eat()方法,如

果有这个方法,编译可以通过,如果没有,编译不会通过
        运行的时候看子类Dog有没有eat()方法,如果子类有

eat()方法,输出的是子类中的eat()方法,如果没有输出父类Animal
        中的eat()方法;


为了更好的说明这一点我就举个今天考的例子吧
class  Base{ 
        void  test( ){ 
            System.out.println(“Base.test()”); 
         } 
 } 
 public  class  Child  extends  Base{ 
        void  test(){ 
            System.out.println(“Child.test()”); 
        } 
        public  static  void  main(String[]  a){ 
            Child  child=new Child(); 
             Base   base=new Child(); 
             base.test(); 
        } 
 }

分析:题目中有两个类,分别是Base类和Child类,并且Child继承了Base

类,并且重写了父类的text()方法
    Child  child=new Child();创建子类对象
    Base   base=new Child(); 创建子类对象,赋给父类引用型变

量base,满足了多态的三个前提:1.有继承关系;2、子类重写了父类中         

的方法;3、父类的引用base 指向子类对象(new Child)

base.test()     编译期间看父类中有test()方法,运

行的时候子类中也有test()方法,所以输出结果一目了然了
当然是Child,test()   (是不是觉得挺简单的,只要记住这些判断步骤,相信下次遇到多态就不会出错了)

    C:静态方法:编译和运行都看父类。


补充一点吧:如果子类中有自己的特有方法,如果你想调用特有方法,这

时候你就必须要向下转型了!话不多说还是看一下代码吧

    class Animal{
        String color;
        public void eat(){
            System.out.println("吃东西")
        }
    }
         class Dog extends Animal{
        public void eat(){
            System.out.println("边汪汪的叫,边吃东西

“)//重写,
//当子类不想用父类中继承的eat()

方法,这时候可以重写eat()方法

        public void yaoRen(){
            System.out.println("我可以咬人哦")
        }
    }
}

            Animal a=new Dog()  主函数中有这一句

代码,看到我们就想到了多态,现在我们的需求是

想调用Dog中yaoRen()这个方法,并且这个方法是子类Dog特有的方法
我们该如何调用它呢,这时候我们就不能把Dog当做Animal看待了,要把a强行转成Dog所以代码就要写成

Dog g=(Dog)a; g.yaoRen(),输出结果一目了然
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值