Java学习日记11——多态和虚方法调用

Java学习日记11——多态和虚方法调用

多态的定义在前面已经讲过了,指的是一个程序中相同的名字表示不同的意思。如需查看可以点击这里。本文主要的内容是讲解多态的使用,以及细节内容。多态可以分为:
 编译时的多态:重载(overload)多个同名的方法
 运行时的多态:覆盖(override),主要表现在子类对父类的覆盖。动态绑定是指虚方法的调用,在调用方法时,程序会自动选择正确子类对应的方法。
上溯造型:把派生类型作为基本类型。例如有一个方法函数是应该传入person类对象,但是实际传入person类的子类student对象也是可以的。

class person{
//父类中的方法
	void say(){
	...
	}
	...
}
class student extends person{
//覆盖父类的say函数,重新写say函数
	void say(){
	...
	}
}
//定义方法,且默认类为person
void test(person p){
	System.out.println("hello!");
	//使用person方法
	p.say();
	...
}
//定义新的子类对象
person p = new student;
test(p);//将对象传入Test函数,其执行的是student的say方法

因为传入的类型与声明的类型不一样,那么执行的过程中,会自动调用相应类的方法去执行。例如上面的例程里面,执行程序的时候会执行student中的say函数,而不是继续执行person的say函数。
综上所述:所谓的虚方法就是指,在调用方法时,方法会根据传入的对象改变内部的方法,实现自动对应正确的方法执行。
 通常Java中使用的都是虚方法。但是也有三种例外的方法:
 static修饰的方法:因为static是以声明的类型为主,与示例无关。不存在虚挂的问题。一旦调用,只会执行自己类里面的方法。不会根据输入类型而自动改变。
 private修饰的方法:因为private方法子类是不可见的,所以不会与子类形成同名问题,也不会被虚挂。一旦调用,只会执行自己类里面的方法。不会根据输入类型而自动改变。
 final修饰的方法:因为final修饰的方法具有子类不可覆盖的特性,也不会被虚挂。
 综上:非虚挂的方法都是因为子类和父类之间不继承和不通用而不会产生同名问题,也就不会被虚挂。

如果你对Java有兴趣,可以了解一下前面几期的基础知识!下面附上链接:

Java编程基础认知:Java学习日记1——基础认知
Java面向对象编程认识:Java学习日记2——面向对象编程认知
Java程序的基本结构认识:Java学习日记3——程序类型与构成认知
Java的输入输出方法总结:Java学习日记4——Java输入输出方法总结
Java的数据类型、变量、常量、运算符:Java学习日记5——数据类型、变量、常量、运算符、数组
Java学习日记6——类、字段、方法、this的使用:Java学习日记6——类、字段、方法、this的使用
Java学习日记7——类的继承、super使用规则:Java学习日记7——类的继承、super使用规则
Java学习日记8——修饰符:Java学习日记8——public、static、private、final、abstract、protected
Java学习日记9——接口(长文预警):Java学习日记9——接口(长文预警)
Java学习日记10——Java中的变量及其传递:Java学习日记10——Java中的变量及其传递

你可能感兴趣的:(Java学习日记)