Java面向对象——多态 详解

java基础

**

面向对象——多态

**

来,此篇博客来看看Java面向对象最后一篇——多态,也是Java最简单的最后部分了。

Java面向对象——多态 详解_第1张图片

      这个多态呀。就是事物的多种形态,主要分为静多态和动多态

多态

前提:不知道还记得继承和方法重写重载么。

体现:父类引用或者接口引用执行子类的对象。(就是基类的引用引用派生类的对象)

我记得在继承那块说过,用子类实例化对象然后赋给父类。我们说的多态也就是这个。

既然那个继承,方法重写与重载还有接口抽象都已经说过,这里就不多重复了。

我们直接搞静态绑定和动态绑定:

    我们写上这么父子类,将方法重写重载和字段都写进去


class Parents{

    String name;

    String job;

    void talk(){

        System.out.println("Parent "+name+" is talking");

    }

}

class Son extends Parents{

    String name;

    String school;

    void talk(){

        System.out.println("Son "+name+" is talking");

    }

    void talk(String msg){

        System.out.println("Son "+name+" is talk "+msg);

    }

}

public class Polymorphism {

    public static void main(String[] args) {

        Parents p1 = new Son();

        p1.

    }

}

接下来问题就简单了,这个p1点出来的有什么,点出来的又是如何调用的。

来先看看…

Java面向对象——多态 详解_第2张图片

然后再看看都点出来后


public static void main(String[] args) {

    Parents p1 = new Son();
    
    ((Son) p1).name = "张三";

    p1.job= "无业游民";

    ((Son) p1).school = "家里蹲";

    p1.talk();

    ((Son) p1).talk("我想学Java");

}

我们给定值之后他出现了这样的情况((Son)p1)

我们之前强转都是(Son)p1即可

而这种强转其实在写程序时尽量尽量尽量不要使用

因此我们去掉这种强转,然后把报错的删掉,就剩下了这些


p1.name = "张富贵";
        
p1.job = "地主";
        
p1.talk();

然后运行一下,结果是Son null is talking

这个时候我们就能得出结论(记住,千万不要强转,完全就是流氓行为,我们不分析流氓行为)

    1、字段

我们说编译期看的是声明者,运行也看的是声明者。

    2、方法

我们说编译期看的是声明者,运行看的是实例者。

 

这里我们就知道为什么结果是Son null is talking了

p1的字段在运行期全部给定了Parents,而方法调用时调用的却不是Parents里的方法,而是Son里重写了Parents的方法。

所以:

    1、在编译期就能决定对象能调用什么方法和字段以及是那个(包括识别方法重载)。静态绑定

    2、程序运行过程中,通过动态创建对象的过程中来定位方法(方法重写的使用)的过程。动态绑定

 

既然这样,我们不是上篇博客说的就是static嘛!!!

那这个static是怎么绑定的???

Java面向对象——多态 详解_第3张图片

那就把之前的那段程序里所有的字段和方法加上static关键字


我们会发现结果变为Parent 张富贵 is talking

说明static方法:编译期看的是声明者,运行也看的是声明者。

至于static字段嘛——这个就不用说了吧,static自己的性质和字段本身在多态就把它给决定了

最后再说一遍,不要强转

面向对象三大特征到此为止是全部结束。

我们在用Java编程,就要多利用面向对象的思想,这样才能写一个真正的java的好代码。

到此为止,Java最简单的部分(Java语法)也算是完成了。现在可以应用这些去便一个简单的系统是可以了。


	这里可以找一个模拟银行系统,或者学生管理等系统
	
	实现一些简单的功能来作为练习

之后的内容则是对Java的特性和更深一层的东西。如果你要使用Java去找工作等,就必须对之后的内容进行深入分析。

那就到这里

持续更新中

Java面向对象——多态 详解_第4张图片

上一篇 》
final和static关键字

你可能感兴趣的:(#,JAVA-基础,JavaSE)