一、多态的概述
- 面向对象的三大特性:封装性、继承性、多态性
extends
继承或者implements
实现,是多态性的前提
一个对象拥有多种形态,这就是对象的多态性
二、多态的格式与使用
代码当中体现多态性,其实就是一句话:父类引用指向子类对象
格式: 父类名称 对象名=new 子类名称(); 或者: 接口名称 对象名=new 实现类名();
public class Fu { public void method(){ System.out.println("父类方法"); } public void methodFu(){ System.out.println(" 父类方法特有的"); } }
public class Zi extends Fu { @Override public void method(){ System.out.println("子类方法"); } }
public class demoMulti { public static void main(String[] args) { //使用多态的写法 //左侧父类的引用 指向了右侧子类的对象 Fu obj=new Zi(); obj.method();//子类方法 obj.methodFu();//父类方法特有的 } }
三、多态中使用成员方法的特点
public class Fuu /*extends Object*/ { int num=10; public void showNum(){ System.out.println(num); } }
public class Zii extends Fuu{ int num=20; int age=20; @Override public void showNum(){ System.out.println(num); } }
/** * @author :CaiCai * @date : 2022/4/10 17:03 */ /* 访问成员变量的方式: 直接通过对象名访问成员变量,看等号的左边是谁,没有则向上找 间接通过成员方法访问成员变量,看该方法属于谁,优先使用谁,没有就向上找 */ public class demoMultiFiled { public static void main(String[] args) { // 使用多态的写法: 左父右子 Fuu obj=new Zii(); System.out.println(obj.num);//10 //System.out.println(obj.age);//错误写法 // obj.showNum();//10 子类没有覆盖重写就是父::10 obj.showNum();//20 子类如果覆盖重写就是子:20 } }
在多态的代码当中,成员方法的访问规则是:看new的是谁,就优先使用谁,没有则向上找
口诀:
成员变量:编译看左边,运行还看左边
成员方法:编译看左,运行看右
*/ public class Fuu /*extends Object*/ { int num=10; public void showNum(){ System.out.println(num); } public void method(){ System.out.println("父类方法"); } public void methodFu(){ System.out.println("父类特有方法 "); } }
public class Zii extends Fuu{ int num=20; int age=20; @Override public void showNum(){ System.out.println(num); } @Override public void method(){ System.out.println("子类方法"); } public void methodZii(){ System.out.println("子类特有方法"); } }
/* 口诀: 成员变量:编译看左边,运行还看左边 成员方法:编译看左,运行看右 */ public class demo02MultiFiled { public static void main(String[] args) { Fuu obj=new Zii(); obj.method();//子类方法(父子都有,优先使用子) obj.methodFu();//父类特有方法(子类没有,父类有,向上找到父类) } }
四、使用多态的好处