Java语言基础之静态绑定and动态绑定
来源:互联网 发布:手机淘宝怎么删除评论 编辑:程序博客网 时间:2024/05/21 10:28
此次所有的讨论都是子类赋值给父类时出现的情况。
静态绑定:
在程序执行前方法已经被绑定,此时是由编译器或者其他链接程序实现
1 Java中的方法只有final ,static,private,构造方法是静态绑定
2 所有的属性都是静态绑定。
动态绑定:
运行时根据具体对象的类型进行绑定
父类子类
子类赋值给父类时,
1 父类中有声明的方法才可以调用,父类中未声明,子类中声明无法调用子类方法。(规定)
2 父类子类都声明的方法,在父类中无privatestatic final修饰或者不是父类的构造函数,调用子类的方法。(无修饰,调子类)(动态绑定)
3 父类子类都声明的方法,在父类中被privatestatic final修饰或者是父类的构造函数,则调用父类的方法。(有修饰,调父类)(静态绑定)
4 父类子类都声明的属性,调用父类的属性。(全声明,调父类)(静态绑定)
5 父类中声明的属性,子类未声明,则调用父类的属性。
子类赋值给父类时
对于方法来说,只要有子类,就要用子类的,子类没有时,就直接调用父类的方法。
父类animal:
package Com;public class Animal {public String name; // 父类子类中同时声明,调用父类(静态绑定)public String Color; // 构造器 静态绑定public Animal(){this("Animal","未赋色");}public Animal(String name,String Color){this.name=name;this.Color=Color;System.out.println("Animal.... 构造器");}// static 修饰 静态绑定public static int age;// 属于类(静态绑定)public static void agefuc() // 静态方法(静态绑定){System.out.println("类的年龄是"+age);}//final 修饰 静态绑定public final int gogo=111;// 常量 不能更改 属于父类public final void go() // 常量函数 意味着该方法不能被重写{System.out.println("常量函数!!!");}// private 只能类中调用 静态绑定private int pp=123;private int getPP(){return 222;}//普通方法 子类赋值给父类时,调用的是子类的方法public void howl(){System.out.println(name+" .....xxxxx.....");}public void showColor(){System.out.println(Color+"....父类....");}//子类中无此方法,则调用直接调用父类方法public void msg(){}}
子类Cat:
package Com;public class Cat extends Animal{public String name;// 父类中也有name属性,但由于是静态绑定,所以调用子类howl,无法得到name的值,输出为null// Cat子类中没有Color属性,直接从父类继承过来。// 构造器为静态绑定,子类new一个新的对象赋值给父类时,实际调用的是父类的构造器(String name,String Color) 而不是Cat(String name,String Color)public Cat() { super(); // 可省略}public Cat(String name,String Color){this.name=name;this.Color=Color;System.out.println("Cat.....构造器");}public void howl(){System.out.println(name+"..... miaomiao!!!");}public void showColor(){System.out.println(Color+"....子类....");}}
Main:
package Com;public class main {public static void main(String args[]) {//此次所有的讨论都是子类赋值给父类时出现的情况。Animal a = new Cat(); // 编译期时,a被认为是Animal类型的,运行期时,a被认为是Cat();a.name="xiaomao";a.Color="白色";//(动态绑定) 调用子类的方法时,子类属性值为最高优先级的属性值(本类属性优先级>父类属性优先级)a.howl(); // 调用的是子类的方法,但由于父类子类中都有name属性,实际调用父类属性(静态绑定),子类不赋值,子类输出自己的name属性时,为NULLa.showColor(); //调用的子类的方法,只有在父类中声明color,子类输出父类的color 为”白色“。// 常量方法 (静态绑定)a.go();Animal.age=12;// 属于类,不需要new对象,可直接调用。(静态绑定)Animal.agefuc();} }
结果:
从结果可以看出 构造器为静态绑定
name属性为父类子类都声明的,调用的是父类的属性(静态绑定),子类的方法 (动态绑定)
color属性是父类声明的,子类调用时直接接收父类的“白色”值
常量函数为静态绑定
static 修饰的是静态绑定
小结:
静态绑定和动态绑定的实质就是子类赋值给父类时,谁被调用的情况。静态绑定是在链接时被调用,而动态绑定是程序跑起来时被调用。
0 0
- Java语言基础之静态绑定and动态绑定
- 07.Java 基础 - 静态绑定&动态绑定
- Java【动态绑定、静态绑定】-动态绑定
- java动态绑定静态绑定
- Java动态绑定 静态绑定
- java 静态绑定 动态绑定
- Java 动态绑定,静态绑定
- 学习笔记之 java的动态绑定与静态绑定
- Java之重载,隐藏,静态绑定,动态绑定
- Java面试系列【动态绑定、静态绑定】-动态绑定,基础篇
- MyC++之动态绑定和静态绑定
- C++之动态绑定和静态绑定
- C++之动态绑定和静态绑定
- C++之动态绑定和静态绑定
- 静态绑定 动态绑定
- java的动态绑定与静态绑定
- java的动态绑定与静态绑定
- java的动态绑定与静态绑定
- Thinking In Relay #Facebook Relay文档翻译#
- namenode总是启动不了
- 九度OJ 1151:位操作练习 (位操作)
- Trie字典树总结
- Eclipse中的Web项目自动部署到Tomcat路径下
- Java语言基础之静态绑定and动态绑定
- iOS开发必备--环境变量配置(Debug & Release)
- 九度OJ 1152:点菜问题 (01背包、DP)
- java静态代理与动态代理的区别
- 01 筛选法求素数
- STORM启动与部署TOPOLOGY
- 个性化push推荐系统架构和经验分享 (三)
- androidStudio gradle 编译基础
- 网页开发HTML代码中的命名规则