多态介绍和多态的特点
多态介绍
定义: 多态是指不同类的对象在调用同一个方法是所呈现出多种不同行为。
同一个引用类型,使用不同的实例而执行不同的操作,即父类引用指向子类对象
使用条件:
(1)要有继承或者实现的关系
(2)要有方法重写
(3)要有父类引用指向子类对象
语法格式:
父类类名 引用名称 = new 子类类名();
class CutMain{ public void cut(){ System.out.println("。。。"); } } class Barber extends CutMain{ @Override public void cut(){ System.out.println("理发师:理发"); } } class Docter extends CutMain{ @Override public void cut(){ System.out.println("医生:动手术"); } }
public static void main(String[] args) { CutMain barber = new Barber(); CutMain docter = new Docter(); barber.cut(); docter.cut(); }
运行结果:
多态的特点
在多态(父类引用指向子类的实现)的情况下,我们访问引用相关的成员(成员变量,成员方法,构造方法,静态方法)时的情况
成员变量
class CutMain{ int i = 10; public void cut(){ System.out.println("。。。"); } } class Barber extends CutMain{ int i = 100; @Override public void cut(){ System.out.println("理发师:理发"); } } class Docter extends CutMain{ int i = 1000; @Override public void cut(){ System.out.println("医生:动手术"); } }
public static void main(String[] args) { CutMain barber = new Barber(); CutMain docter = new Docter(); barber.cut(); docter.cut(); System.out.println(barber.i); System.out.println(docter.i); }
运行结果:
在多态中,成员变量不存在覆盖的情况,在访问的时候直接访问父类中的属性
成员方法
多态介绍案例;
在多态汇总,因为方法存在重写(覆盖),所以在访问的时候执行的是子类中重写的方法
构造方法
class CutMain{ int i = 10; public void cut(){ System.out.println("。。。"); } public CutMain() { System.out.println("父类构造方法"); } } class Barber extends CutMain{ int i = 100; @Override public void cut(){ System.out.println("理发师:理发"); } public Barber() { System.out.println("Barber子类的构造方法"); } } class Docter extends CutMain{ int i = 1000; @Override public void cut(){ System.out.println("医生:动手术"); } public Docter() { System.out.println("Docter子类的构造方法"); } }
public static void main(String[] args) { CutMain barber = new Barber(); CutMain docter = new Docter(); barber.cut(); docter.cut(); System.out.println(barber.i); System.out.println(docter.i); }
运行结果:
在创建类类对象时会先执行构造方法,在执行子类的构造方法时会先执行父类的构造方法
先执行父类的构造方法,可以帮助我们初始化父类的成员变量,然后在执行子类的构造方法中其他的代码来实现子类成员变量的初始化。
静态方法
class CutMain{ int i = 10; public void cut(){ System.out.println("。。。"); } public CutMain() { System.out.println("父类构造方法"); } public static void eat(){ System.out.println("父类吃"); } } class Barber extends CutMain{ int i = 100; @Override public void cut(){ System.out.println("理发师:理发"); } public Barber() { System.out.println("Barber子类的构造方法"); } public static void eat(){ System.out.println("Barber类吃"); } } class Docter extends CutMain{ int i = 1000; @Override public void cut(){ System.out.println("医生:动手术"); } public Docter() { System.out.println("Docter子类的构造方法"); } public static void eat(){ System.out.println("Docter类吃"); } }
public static void main(String[] args) { CutMain barber = new Barber(); CutMain docter = new Docter(); barber.cut(); docter.cut(); System.out.println(barber.i); System.out.println(docter.i); barber.eat(); }
运行结果:
在多态中,不会继承静态方法,因为静态方法是属于类的。所以在多态中我们调用静态方法那么执行的也是父类中的静态方法
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix