java多态
多态
即同一方法可以根据发送对象的不同而采取多种不同的行为方式
注意:
- 多态是方法的多态,属性没有多态
- 父类和子类有联系(ClassCastException类型转换异常)
- 多态存在条件:
- 继承关系
- 方法重写
- 父类引用指向子类对象 Father f1=new Son();
若方法是static、final、private修饰的则不能被重写
package com.yuanyu.Oop;
public class Application {
public static void main(String[] args) {
//一个对象的实际类型是确定的
//new Person();
//new Student();
//可以指向的引用类型是不确定的
Student s1= new Student();
Person s2 = new Student(); //父类的引用指向子类
Object s3=new Student();
}
}
一个对象实际类型(右边)是确定的但引用类型(左边)是不确定的
package com.yuanyu.Oop;
public class Person {
public void run(){
System.out.println("Run");
}
}
package com.yuanyu.Oop;
public class Student extends Person {
}
package com.yuanyu.Oop;
public class Application {
public static void main(String[] args) {
//一个对象的实际类型是确定的
//new Person();
//new Student();
//可以指向的引用类型是不确定的
Student s1= new Student();
Person s2 = new Student(); //父类的引用指向子类
Object s3=new Student();
s2.run(); //Run
}
}
子类继承了父类的全部方法,因此可以输出Run
在子类中进行方法的重写
package com.yuanyu.Oop;
public class Student extends Person {
@Override
public void run() {
System.out.println("Son");
}
}
package com.yuanyu.Oop;
public class Application {
public static void main(String[] args) {
//一个对象的实际类型是确定的
//new Person();
//new Student();
//可以指向的引用类型是不确定的
Student s1= new Student();
Person s2 = new Student(); //父类的引用指向子类
Object s3=new Student();
s1.run(); //Son
s2.run(); //Son
}
}
子类一旦重写父类的方法,执行的是子类方法
在子类中添加新的方法
package com.yuanyu.Oop;
public class Student extends Person {
@Override
public void run() {
System.out.println("Son");
}
public void eat(){
System.out.println("eat");
}
}
package com.yuanyu.Oop;
public class Application {
public static void main(String[] args) {
//一个对象的实际类型是确定的
//new Person();
//new Student();
//可以指向的引用类型是不确定的
Student s1= new Student();
Person s2 = new Student(); //父类的引用指向子类
Object s3=new Student();
s1.eat();
s2.eat(); //报错
((Student) s2).eat();
}
}
子类能调用的方法都是自己的或继承父类的方法
父类可以指向子类,但不能调用子类独有的方法,但是父类可以强制转换成子类调用
对象能执行哪些方法看对象左边的类型,与右边关系不大
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!