关于Java基础中面向对象程序设计多态调用的机制,static与非static的区分

*首先关于多态的问题:
1:多态是继承父类的方法!!而不是属性 只能继承方法
**

多态的具体操作:

通过创建子类的父类对象:


package OOP;
//父类对象:
public class person {
    public person() {
    }

    public void say()
    {
        System.out.println("person sayas....");
    }
}

//子类对象
public class student extends person{
    student() {
        super();
    }
    public void say()
    {
        System.out.println("student say..");
    }
}

//在main函数中调用
public class application {
    public static void main(String[] args) {
        student s1 = new student();  //用student实例
        person s2= new student();  //创建一个person类的实例
        s1.say();
        s2.say();
    }
}

最后的结果显示:
在这里插入图片描述

可以这样理解:
子类继承于父类,那么父类的所有东西 子类都可以使用,
在这里插入图片描述
所以实际上用new student给person赋值 其所给予给person的东西可能远远大于person类所具有的 那么通过它也可以调用子类的东西,并且student类中的say函数相当于是重写了person类里面的say函数 会实现函数覆盖这就是所谓的同名隐藏规则(与C++)类似。
总结:简而言之,多态就是通过父类的对象调用子类的函数 ,只有有继承关系的两个类能如此使用!!!!若是两个毫无关系的类是不能实现内部的转换的!

static与非static的区别:

若将上述函数改为:

public class person {
   public person() {
   }

   public  static void say()   //加入static前缀
   {
       System.out.println("person sayas....");
   }
}


public class student extends person{
   student() {
       super();
   }
   public  static void say()         //也加上static
   {
       System.out.println("student say..");
   }
}

最后的结果
在这里插入图片描述

此时会发现第二行的输入不同

这是因为!!!!!!
static的特殊性!!!

在这里插入图片描述
所以若在这时写了两个相同的个方法,他会报错,只有非static才能从属于不同的类,而static是一个特殊的地方 所有的东西都放在里面,他是不允许有名字相同的两个方法出现的。

关于多态的调用,建议多写几个不同的函数创建几个不同的类来实现 会更容易理解噢!

posted on 2020-04-17 00:03  小龚同学  阅读(135)  评论(0)    收藏  举报