1、多态的基本概念
- 面向对象的三大特征:封装性,继承性,多态性;
- extends ,继承,或者implement,实现,是多态性的前提
- 小明是一个对象,这个对象既有学生形态,也有人类形态,一个对象拥有多种形态,这就是多态
- 对象的多态性
2、多态的表现形式
(运行时多态)方法重写
1、多态的格式与使用
体现多态性:父类的引用指向子类的对象
格式: 父类名称 对象名 = new 子类名称() ; 或者 接口名称 对象名 = new 实现类名称();
package Interface.demo5;
public class Fu {
public void method(){
System.out.println("父类方法");
}
public void methodFu(){
System.out.println("父类特有的方法");
}
}
package Interface.demo5;
public class Zi extends Fu {
@Override
public void method() {
System.out.println("子类方法");
}
}
package Interface.demo5;
public class DemoMuilts {
public static void main(String[] args) {
Fu obj = new Zi();
obj.method();
obj.methodFu();
}
}
子类方法
父类特有的方法
2、多态中成员变量与成员方法的访问特点
- 直接通过对象名称来访问,看等号左边是谁,优先用谁,没有就向上找,
- 间接通过成员方法来访问成员变量,看方法属于谁,就优先使用谁
- 成员方法, new谁,就优先用谁,
- 成员方法:口诀:编译看左,运行看右边,
- >成员变量:口诀:编译看左边,运行还看左边,
package Interface.demo5;
public class Fu {
int num = 10;
public void method(){
System.out.println(num);
}
}
package Interface.demo5;
public class Zi extends Fu {
int num = 20;
@Override
public void method() {
System.out.println(num);
}
}
package Interface.demo5;
public class DemoMuilts {
public static void main(String[] args) {
//多态:父类对象指向子类对象的引用
Fu obj = new Zi();
System.out.println(obj.num); //10,成员变量,运行时,等号左面是谁,就是谁的值,成员方法,等号右面是谁,就是谁的方法,
obj.method(); //20
}
}
10
20
3、使用多态的好处
无论右边new的时候换成那个子类对象,等号左边调用的方法都不会变。
(编译时多态)方法重载
概念:在一个类中,多个方法具有相同的方法名称,但却具有不同的参数列表,与返回值无关,称为 方法重载
参数列表不同指:方法的参数类型,方法的个数,方法的参数类型不同的参数顺序
public class MathUtils {
public int multiply(int num1,int num2){
return num1 * num2;
}
public double multiply(double num1,double num2){
return num1 * num2;
}
}java
public static void main(String[] args) {
MathUtils mu = new MathUtils();
int res1 = mu.multiply(2,3);
double res2 = mu.multiply(2.3,5.6);
System.out.println(res1);
System.out.println(res2);
}
6
12.879999999999999
方法名相同,但参数的类型不同,参数顺序也可以不同,参数的个数也可以不同