java面向对象 10 多态
多态:
版本。调用者只要需要使用同一个方法名,系统会根据不同情况调用相应的不同方法,从而实现不同
的功能。(一个名字,多个方法)
多态性的实现有两种方式:1. 覆盖实现多态性。
2.
-
多态存在的条件 :1. 有继承关系
2. 子类重写父类的方法
-
覆盖:1. 通过子类对继承父类方法的定义来实现。
注意:在子类重定义父类方法时,要求父类原型 (参数个数,类型,顺序) 完全相同。
-
重写方法调用规则:根据调用该方法的实例的类型来决定选择哪个方法调用。对于类的一个
实例,如果子类重写父类的方法,则运行时 系统调用子类的方法。如果子类
继承了父类的方法(未重写),则运行时系统调用父类的方法。一个父类对象可以
通过引用子类的实例化来调用子类子类的方法。
class Perosn
{
public void run()
{
System.out.println("run");
}
}
/*
多态注意事项:
1.多态是方法的多态,属性没有多态
2.父类和子类,有联系 类型转换异常!classCastException!
3.存在的条件:继承关系,方法需要重写,父类引用指向子类对象! Father f1=new Son();
1.static 方法,属于类,它不属于实例
2.final 常量池里面:
3.private方法:这些都不能重写,就更不能多态
*/
class Student extends Perosn
{
public void run()
{
System.out.println("son");
}
public void eat ()
{
System.out.println("ear");
}
}
public class A //Application
{
public static void main(String[] args)
{
//一个对象的实际类型是确定的
//new Student();
// new Perosn();
//可以指向的引用类型就不确定了,父类的引用指向子类
//Student 能调用的方法都是自己的或者继承父类的!
Student s1= new Student();
//Perosn 父类型,可以指向子类,但是不能调用子类独有的方法
Perosn s2=new Student();
Object s3=new Student();
//对象能执行哪些方法,主要看对象左边的类型,和右边关系不大!
//子类如果没有重写父类的方法,就调用父类的,如果子类重写了父类的方法就调用子类的
s2.run();//子类重写了父类的方法,执行了子类的方法
s1.run();
s1.eat();
/*
son
son
ear
*/
}
}
动态编译:类型:可扩展性变强
-
及同一个方法可以根据发送对象的不同而采用多种不同的行为方式。
-
一个对象的实际类型是确定的,但可以指向对象的引用的类型有很多。
-
注意:多态是方法的多态,属性没有多态性。
-
instanceof (类型转换)引用类型
实例化子类:1. 如果方法重写,子类调用子类的方法。
2.如果方法未重写,子类对象调用父类方法。
父类实例化子类:1. 如果方法重写,父类调用子类。
2. 如果方法未重写,父类调用父类
3. 父类型,可以指向子类,但是不能调用子类独有的方法
方法重写两个原则:1. 改写后的方法不能比被重写的方法有更严格的访问权限。
2. 改写后的方法不能比重写的方法产生更多 的异常。
重载:1. 类中多个同名的方法来实现的。
2. 由于重载发生在一个类里(覆盖发生在不同类中),不能用类名来区分不同的方法,
所以采用不同的形式参数列表,包括形式参数的个数,类型,顺序的不同,俩区分
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律