教妹学Java(三十七):静态绑定和动态绑定

简介: 教妹学Java(三十七):静态绑定和动态绑定

三妹开学了,学的计算机软件编程。她学校离我家很近,坐公交车也就 10 站路的距离, 每逢周末她都会来找我,让我辅导她学习 Java。作为一名拥有十余年编程经验的程序员,再加上父母给我们的这份血缘关系,我觉得义不容辞。


“二哥,今天我们要学习的内容是‘静态绑定和动态绑定’,对吧?”看来三妹已经提前预习了我上次留给她的作业。


“是的,三妹。静态绑定是指对象的类型在编译阶段就决定了。 ”我面带着朴实无华的微笑回答着她,“动态绑定是指对象的类型直到运行时才决定。”


----正儿八经的分割线,正文开始------------


1)每个变量都有一个类型。


int data = 10;


变量的类型可以是基本数据类型,也可以使引用数据类型。data 变量的类型是 int,基本数据类型中的一种。


2)引用数据类型


public class Dog {

   public static void main(String[] args) {

       Dog dog;

   }

}



dog 就是一个引用数据类型。


3)分类的引用变量可以指向子类对象


class A{}
class B extends A{}
public class UpcastingDemo {
    A a = new B();
}



变量 a 的类型是父类 A,但指向的是子类对象 B。


4)静态绑定


任何 private、final 或者 static 的方法,都是静态绑定(因为它们都无法被子类重写)。


/**
 * @author 微信搜「沉默王二」,回复关键字 PDF
 */
public class Cat {
    private void eat() {
        System.out.println("吃");
    }
    public static void main(String[] args) {
        Cat cat = new Cat();
        cat.eat();
    }
}



2)动态绑定


来看下面这个例子:


/**
 * @author 微信搜「沉默王二」,回复关键字 PDF
 */
class Car{
    void run(){
        System.out.println("跑");
    }
}
class Weilai extends  Car {
    @Override
    void run() {
        System.out.println("用电跑");
    }
}
public class CarDemo {
    public static void main(String[] args) {
        Car car = new Weilai();
        car.run();
    }
}



在上面的例子中,编译器无法决定对象的类型到底是子类还是父类,因为 car 既可能是父类对象也可能是子类对象,编译器只知道它属于 Car 类型。


“三妹,Java 静态绑定和动态绑定我们就学到这里吧,它的用法我相信你一定全部掌握了。”我揉一揉犯困的双眼,疲惫地给三妹说。


“好的,二哥,我这就去练习去。”三妹似乎意犹未尽,这种学习状态真令我感到开心。


相关文章
|
5月前
|
Java
Java语言特性:什么是静态关键字(static)?
Java语言特性:什么是静态关键字(static)?
164 0
|
3月前
|
搜索推荐 Java 编译器
【Java探索之旅】多态:重写、动静态绑定
【Java探索之旅】多态:重写、动静态绑定
24 0
|
4月前
|
XML Java 数据格式
Java一分钟之-JAXB:Java对象到XML绑定
【6月更文挑战第1天】Java Architecture for XML Binding (JAXB) 是Java平台标准,用于自动转换Java对象和XML。它通过注解实现声明式映射,简化XML处理。本文介绍了JAXB的基本使用、常见问题和最佳实践,包括对象到XML(Marshalling)和XML到对象(Unmarshalling)过程,并通过示例展示如何在Java类和XML之间进行转换。注意类型匹配、注解冲突和JAXB上下文创建等问题,以及如何优化性能和避免循环引用。
169 3
|
4月前
|
设计模式 安全 Java
Java设计模式:代理模式的静态和动态之分(八)
Java设计模式:代理模式的静态和动态之分(八)
|
5月前
|
Java
Java内部类(成员内部类、静态内部类、局部内部类、局部内部类)
Java内部类(成员内部类、静态内部类、局部内部类、局部内部类)
36 3
|
4月前
|
存储 Java 编译器
Java静态绑定和动态绑定
Java静态绑定和动态绑定
44 0
|
4月前
|
Java
【Java基础】 内部类 (成员内部类、局部内部类、静态内部类、匿名内部类)
Java内部类 (成员内部类、局部内部类、静态内部类、匿名内部类)
29 0
|
5月前
|
Java
【Java探索之旅】内部类 静态、实例、局部、匿名内部类全面解析
【Java探索之旅】内部类 静态、实例、局部、匿名内部类全面解析
31 0
|
5月前
|
存储 Java 编译器
【Java探索之旅】静态关键字static与代码块的奥秘
【Java探索之旅】静态关键字static与代码块的奥秘
31 0
|
5月前
|
消息中间件 Java API
RabbitMQ入门指南(五):Java声明队列、交换机以及绑定
RabbitMQ是一个高效、可靠的开源消息队列系统,广泛用于软件开发、数据传输、微服务等领域。本文主要介绍了Java声明队列、交换机以及绑定队列和交换机等内容。
224 0
下一篇
无影云桌面