初始Java18
学习内容:
1、动态绑定
Java虚拟机调用一个类方法时,他会基于对象引用的类型(通常在编译时可知)来选择调用的方法。
相反,当虚拟机调用一个实例方法时,他会基于对象实际的类型(只在运行时得知)来选择所调用的方法。
动态绑定具体表现在向上转型上,因为只有在运行时才知道具体运行的是哪个实例
package day01; public class Father { public void say() { System.out.println("father say()"); } public static void main(String[] args) { //向上转型 Father son=new Son(); son.say(); } } class Son extends Father{ public void say() { System.out.println("son say()"); } }
结果为:son say()
2、静态绑定
静态绑定是指在程序编译时绑定的,在Java中的变量都是动态绑定的,只有private,static和final是静态绑定的
package day01; public class Father { String name="father"; public static void say() { System.out.println("father say()"); } public void say2() { System.out.println("father say2()"); } public static void main(String[] args) { Father f= new Son(); //虽然是指向了Son的引用,但是变量在编译的时候就动态绑定了,所以输出的是father System.out.println(f.name); //因为Father里面的say是static,编译时被静态绑定了,所以输出father say() f.say();//出现警告:应该以静态方式访问类型 Father 中的静态方法 say()
//而say2不是static 方法,f是由Son new出来的,执行的时候会执行new 它的那个类的say2()方法 //所以输出son say2(),这是Java的多态性 f.say2(); } } class Son extends Father{ String name="son"; public static void say() { System.out.println("son say()"); } public void say2() { System.out.println("son say2()"); } }
3、static关键字
通常访问类的属性和方法需要创建该类的实例,而static 关键字的访问是不需要某个特定的实例的。
(1)静态变量
静态变量只需要在变量前加上static关键字即可,静态变量不需要通过对象来访问,直接使用“类名. 变量名”直接访问即可,并且该变量不属于具体的哪一对象
(2)静态方法
在方法前加上static关键字,静态方法可以使用“类名. 方法名()”来调用,不需要通过对象来调用
(3)静态代码块
static代码块也叫静态代码块,可以有多个,并且位置可以随便放,它不在任何方法体内,JVM加载类时会执行这些静态的代码块,static代码块会优先与构造器执行,如static代码块有多个,KVN将按照它们在类中出现的先后顺序依次执行,每个代码块只执行一次。
4、final关键字
final关键字是最终的意思,使用final修饰类,代表该类是不能被继承的
final修饰方法表示该方法不能被重写
final修饰变量,代表该变量是常量
(1)final属性
final修饰属性,代表该属性是常量,并且该属性不能修改,否则会报错
(2)final方法
使用final修饰方法时,该方法不能被重写。
这里所说的不能被重写,并不是子类一定不能定义同名方法。如果父类的方法是私有类型,子类是允许定义该方法的
(3)final类
使用final修饰的类,表示该类不能被继承
明天要学习的内容:
abstract关键字、综合实例