面向对象的三大特征之一:多态性

1.多态性的理解:

一个事物的多种形态

2.什么是多态性:

对象的多态性:父类的引用指向子类的对象(子类的对象赋给父类的引用)

举例:

Person p= new Man();

Object obj = new Date();

3.多态性的使用:虚拟方法调用

>有了对象的多态使用以后,在编译期,只能调用父类中的声明的方法,但在运行期实际执行的时子类中重写的父类的方法。

>总结:编译,看左边;运行,看右边。

4.多态性的使用前提:

①要有类的继承关系

②子类中要有重写父类中的方法

5.多态性的应用举例:

public class Test {

  public void method(Person e) {

    //……

    e.getInfor();

  }

  public static void main(Stirng args[]) {

    Test t = new Test();

    Student m = new Student();

    t.method(m); //子类的对象m传送给父类类型的参数e

  }

}

6.多态性使用的注意点:

只适用于方法,不适用于属性(属性编译和运行都看左边)

7.关于向上转型与向下转型:

7.1向上转型:多态

7.2向下转型:

7.2.1为什么使用向下转型:

有了对象的多条以后,内存实际是加载了子类特有的属性和方法的,但是由于变量声明为父类类型,导致编译时,只能调用父类中声明的属性和方法。子类特有的属性和方法不能调用。

如何才能调用子类特有的属性和方法?

--->向下转型

7.2.2如何实现向下转型:

使用强制类型转换符:()

7.2.3使用时注意的点:

①使用强转时,可能出现ClassCastException的异常

②为了避免在向下转型时出现ClassCastException的异常,在向下转型之前,先进行instanceof的判断,一旦返回true,就进行向下转型。如果返回false,就不进行向下转型

7.2.4 instanceof的使用:返回值为boolean类型

a instanceof A:判断对象(引用)a是否是类A的实例。如果是,返回true,如果不是返回false。

要求a所属的类与类A必须是子类和父类的关系,否则编译错误。

如果a属于类A的子类B,a instanceof A的值也为true

7.2.5 图示:

8.多态性的几个问题:

8.1对多态性的理解:

①实现代码的通用性。

②Object类中定义 public boolean equals(Object obj){}

JDBC:使用java程序操作(获取数据库的链接、CRUD)数据库(MySQL,Oracle,DB2,SQL Server)

③抽象类、接口的使用肯定体现了多态性。(抽象类、接口不能实例化)

8.2多态是编译时行为还是运行时行为?

是运行时行为。

代码表示如下:只有当程序运行之后才能得到结果,所以为运行时行为。

import java.util.Random;//导入Random包
 
publicclass Test { 
    public static Animal getInstance(int key){
        switch (key){
            case 0:
                return new Dog();
            case 1:
                return new Cat();
            default:
                return new Sheep();
        }
    }
    public static void main(String[] args){
       int key = new Random().nextInt(3);//随机产生一个0~3的数赋值给key 
        System.out.println(key); 
       Animal animal = getInstance(key);//多态的使用 
        animal.eat();
    }
}
classAnimal{
    public void eat(){
    System.out.println("Animal");
    }
}
classDog extends Animal{
    public void eat(){
    System.out.println("Dog");
    }
}
classCat extends Animal{
    public void eat(){
    System.out.println("Cat");
    }
}
classSheep extends Animal{
    public void eat(){
    System.out.println("Sheep");
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值