欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java笔记之多态的详解

程序员文章站 2024-03-21 20:24:52
...

Java多态——提高代码的拓展性

简单说:就是一个对象对应着不同类型

多态在代码中的体现:父类或者接口的引用指向其子类的对象。

Animal a =子类对象;能调用父类里面子类共有的方法或者变量。

多态的好处:提高了代码的扩展性,前期定义的代码可以使用后期的内容。

多态的前提:

1、必须有关系、继承、实现

2、要有覆盖

 

abstract class Animal
{
   abstract void eat();
}

class dog extends Animal 
{
    void eat()
 {
     System.out.println("啃骨头");
 }
    void lookhome()
  {
    System.out.println("看家");
 }

}
class cat extends Animal
{
    void eat()
{
    System.out.println("吃鱼");
}
    void catchMouse()
{
     System.out.println("抓老鼠");   
}
}
class pig extends Animal
{
    void eat()
{
    System.out.println("吃饲料");
}
}

class DuotaiDemo
{
    public static void main (String[] args)
{
    cat c =new cat();
    dog d =new dog();
    method(c);
    method(d);
    method(new pig());
    
}
    public static void method(Animal a)
{
    a.eat();
}
}

Animal a =new cat(); //自动类型提升,猫对象提升了动物类型。但是特有功能无法访问。

//作业就是限制了对特有功能的访问

// 专业讲:向上转型

 

如果还想用具体动物猫的特头功能,你可以将该对象向下转型

向下转型的目的是为了使用子类中特有的方法。

cat c=(cat) a; // 向下转型的目的是为了使用子类中的特有方法。

c.eat(); c.catchMouse();

注意:对于转型,自始至终都是子类对象在做着类型的变化。

狗不能转化为猫,假设动物可以创建对象,动物也不能转化为猫。

转型就是,猫对象有两种类型,在这两种类型之间进行转化。

instanceof:用于判断对象的具体类型,只能用于引用数据类型判断 如:if(a instanceof Cat ){ }

多态时成员的特点:

1、成员变量(没有覆盖一说)

编译时:参考引用型变量所属的类中的是否有调用的成员变量,有,编译通过,没有,编译失败。

运行时:参考引用型变量所属的类中的是否有调用的成员变量,并运行该所属类中的成员变量。

简单说:编译和运行都参考等号左边。

2、成员函数(非静态)

编译时:参考引用型变量所属的类中的是否有调用的函数。有,编译通过,没有,编译失败。

运行时:参考的是对象所属的类中是否有调用的函数。

简单说:编译看左边,运行看右边

3、静态函数

编译时:参考引用型变量所属的类中的是否有调用的静态方法

运行时:参考引用型变量所属的类中的是否有调用的静态方法

简单说:编译和运行都看左边。

其实对于静态方法,是不需要对象的,直接用类名进行调用即可。