面向对象之多态

1
2
3
4
5
6
7
8
9
10
11
12
/*
*作者:呆萌老师
*☑csdn认证讲师
*☑51cto高级讲师
*☑腾讯课堂认证讲师
*☑网易云课堂认证讲师
*☑华为开发者学堂认证讲师
*☑爱奇艺千人名师计划成员
*在这里给大家分享技术、知识和生活
*各种干货,记得关注哦!
*vx:it_daimeng
*/

  

1、什么是多态

        多态是我们可以创建在不同变成上下文中行为不同的方法或者引用的能力。其简而言之就是调用同一种方法却呈现不同的状态。

        在面向对象中多态与封装,继承并称为面向对象的三大特性。

2、多态的产生

        是因为由于方法重载/覆盖使得我们的方法的实现发生了改变,但是我们的标识符却没变,因此产生了多态。

3、Java中的多态

        在Java中多态可以分为运行时多态与编译时多态。

        编译时多态:方法重载时参数的静态数据绑定。通过方法重载实现控制流由编译时本身决定的一种方式。

        运行时多态:通过继承实现方法覆盖使得数据动态绑定。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package next.overrideinextends;
public class GrandFather {
public void eatPotato() {
System.out.println("Be careful! The potato is sooo hot!");
}
}
class Father extends GrandFather {
@Override
public void eatPotato() {
System.out.println("Nice!");
}
}
class Son extends Father {
@Override
public void eatPotato() {
System.out.println("Nice!");
}
}
class Output {
public static void main(String[] args) {
GrandFather gf = new GrandFather();
GrandFather f = new Father();
GrandFather s = new Son();
s.eatPotato();
f.eatPotato();
gf.eatPotato();
}
}

  

运行结果:

编辑

 4、向上转型的特点

        ①向上转型其实就是将子类的内容赋值给父类。

        ②若子类在父类的基础上做了方法扩展,则子类扩展的功能将无法被父类调用。

        ③子类若是对父类的方法重写了,则向上转型后,父类调用该方法将不再执行父类的内容而是执行子类的内容。

        

5、向上转型的好处

        向上转型实现了引用的类型统一以及传递参数的统一。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public class GrandFather {
    public void eatPotato() {
        System.out.println("Be careful! The potato is sooo hot!");
    }
}
class Father extends GrandFather {
    @Override
    public void eatPotato() {
        System.out.println("Nice!");
    }
}
class Son extends Father {
    @Override
    public void eatPotato() {
        System.out.println("Nice!");
    }
}
class Output {
    public void aVoid(GrandFather f){
        f.eatPotato();
    }
    public static void main(String[] args) {
        GrandFather gf = new GrandFather();
        GrandFather f = new Father();
        GrandFather s = new Son();
       Output output=new Output();
       output.aVoid(gf);
        output.aVoid(f);
        output.aVoid(s);
    }
}

  

 
posted @   呆萌老师  阅读(19)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示