java基础
**
**
来,此篇博客来看看Java面向对象最后一篇——多态,也是Java最简单的最后部分了。
这个多态呀。就是事物的多种形态,主要分为静多态和动多态
前提:不知道还记得继承和方法重写重载么。
体现:父类引用或者接口引用执行子类的对象。(就是基类的引用引用派生类的对象)
我记得在继承那块说过,用子类实例化对象然后赋给父类。我们说的多态也就是这个。
既然那个继承,方法重写与重载还有接口抽象都已经说过,这里就不多重复了。
我们直接搞静态绑定和动态绑定:
我们写上这么父子类,将方法重写重载和字段都写进去
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点出来的有什么,点出来的又是如何调用的。
来先看看…
然后再看看都点出来后
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是怎么绑定的???
那就把之前的那段程序里所有的字段和方法加上static关键字
我们会发现结果变为Parent 张富贵 is talking
说明static方法:编译期看的是声明者,运行也看的是声明者。
至于static字段嘛——这个就不用说了吧,static自己的性质和字段本身在多态就把它给决定了
最后再说一遍,不要强转
面向对象三大特征到此为止是全部结束。
我们在用Java编程,就要多利用面向对象的思想,这样才能写一个真正的java的好代码。
到此为止,Java最简单的部分(Java语法)也算是完成了。现在可以应用这些去便一个简单的系统是可以了。
这里可以找一个模拟银行系统,或者学生管理等系统
实现一些简单的功能来作为练习
之后的内容则是对Java的特性和更深一层的东西。如果你要使用Java去找工作等,就必须对之后的内容进行深入分析。
那就到这里
持续更新中
上一篇 》
final和static关键字