对象多态性的理解

深入理解C++中的动态对象创建与多态性 本博客深入探讨了C++中动态对象创建和多态对象的概念,包括智能指针的使用、动态创建对象的实例、以及如何在程序中实现多态性。通过构建一个棋盘类的实例,本文详细说明了对象集合的实现细节,并通过练习题加深了对相关概念的理解。文章还涉及了文件流的使用和对象持久化的方法,提供了在文件末尾追加数据的示例。 阅读详情

面向对象的三大特性:封装—保护类中的属性不被外部直接访问到;继承—扩展类的属性和功能;那么多态性呢?
多态性是Java中最强悍的地方,那么有一个简单但是又需要好好推敲的疑问:什么是多态?什么是对象的多态?
1,什么是多态?
,按我的理解,什么是多态,字面意思咯,多种状态。
,面向对象的多态特性有两种提现方式:1,方法的重载与覆写(有的人说这不算多态,然而,我感觉算,因为他们也满足了多种状态的要求);2,对象的多态性;
重载—根据方法参数个数和参数类型的不同完成的功能也不同;覆写—–子类根据需求覆写父类中的方法;


1-0:对象的多态性
1-1相上转型:
使用父类对象接收子类实例(自动完成)。子类对象为父类对象实例化。
发生了向上转型,那么在子类中那些独有的属性和方法,就不能被这个转型了的对象所看到了。
class A{                    // 定义类A
    public void fun1(){     // 定义fun1()方法
        System.out.println("A --> public void fun1(){}") ;
    }
    public void fun2(){
        this.fun1() ;       // 调用fun1()方法
    }
};
class B extends A{
    public void fun1(){     // 此方法被子类覆写了
        System.out.println("B --> public void fun1(){}") ;
    }
    public void fun3(){    //子类重新定义的自己独有的方法
        System.out.println("B --> public void fun3(){}") ;
    }
};
public class PolDemo01{
    public static void main(String asrgs[]){
        B b = new B() ;     // 实例化子类对象
        A a = b ;           // 向上转型关系
        a.fun1() ;          // 此方法被子类覆写过
        a.fun3() ;
    }
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
这里a.fun3();这句代码就会报错,因为a已经是从b向上转型过来的了,它看不到b独有的方法了,能看到的都是b中从a继承而来和覆写而来的方法和属性。

向上转型中的注意点
但是,注意,发生了向上转型,是父类对象,然后去调用那些父类中的方法,会发现,被调用的依然是子类中覆写过的方法,如果没有覆写过这些方法,则才会调用父类中的方法,因为发生向上转型了,一定程度上说,他还是子类实例,在我的理解里,是剥除了子类独有特性的子类。(可以形象的这么理解,这个子类对象是个私生子,是婢女所生的非正室所生的孩子,没有给予他开疆拓土成为一方诸侯的能力,仅仅是拥有其父辈积攒的余荫以及和父辈紧密相关的权力,只有正室所生的孩子才拥有父辈带来的光辉以及在父辈基础上继续开疆拓土的权力)调用子类独有的方法和属性就会报错了,因为他的这些方法属性,已经被剥除了,他看不到了,所有报错了。

public class PolDemo01{
    public static void main(String asrgs[]){
        B b = new B() ;     // 实例化子类对象
        A a = b ;           // 向上转型关系
        a.fun1() ;          // 此方法被子类覆写过
        a.fun2() ;
    }
};
1
2
3
4
5
6
7
8


1-2向下转型:
使用子类对象接收父类对象,就是将父类对象变为子类对象(需要强制转型)。
class A{                    // 定义类A
    public void fun1(){     // 定义fun1()方法
        System.out.println("A --> public void fun1(){}") ;
    }
    public void fun2(){
        this.fun1() ;       // 调用fun1()方法
    }
};
class B extends A{
    public void fun1(){     // 此方法被子类覆写了
        System.out.println("B --> public void fun1(){}") ;
    }
    public void fun3(){
        System.out.println("B --> public void fun3(){}") ;
    }
};
public class PolDemo02{
    public static void main(String asrgs[]){
        A a = new B() ;         // 向上转型关系
        B b = (B)a ;        // 发生了向下转型关系
        b.fun1() ;
        b.fun2() ;
        b.fun3() ;
    }
};
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


向下转型中,有一个注意点:
在进行向下转型时,必须先进行向上转型,否则会出现类型转换异常(ClassCastException)。因为,仅仅通过父类,是无法判断某个类是否是其子类的,但是从子类中就可以直接通过extend关键字,直接明白其父类是谁,如果两个没有关系的对象之间进行转换就会发生此异常,就是说,要发生对象的向下转型关系,则肯定必须先产生一个向上转型关系,这样的目的就是为了建立两个对象之间的关系。
class A{                    // 定义类A
    public void fun1(){     // 定义fun1()方法
        System.out.println("A --> public void fun1(){}") ;
    }
    public void fun2(){
        this.fun1() ;       // 调用fun1()方法
    }
};
class B extends A{
    public void fun1(){     // 此方法被子类覆写了
        System.out.println("B --> public void fun1(){}") ;
    }
    public void fun3(){
        System.out.println("B --> public void fun3(){}") ;
    }
};
public class PolDemo03{
    public static void main(String asrgs[]){
        A a = new A() ;         // 实例化了一个父类对象
        B b = (B)a ;        // 发生了向下转型关系
        b.fun1() ;
        b.fun2() ;
        b.fun3() ;
    }
};
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


比如 A 类,B extends A 类,首先第一中情况:B b=new A();这肯定会报异常的;然后第二种情况:A a=new B();这就是向上转型,就是为了让A,B两个类的对象产生关系;之后在进行向下转型,B b=(B)a;这就不会有问题了;
2,对象多态性的优势?
说道优势,怎么最明显,必然是比较一下,一个东西,一门技术到底好不好,怎么知道,对比一下,俗话说,没比较就没伤害,对比一下,使用前和使用后到底有什么差别就知道优势在哪里了。
2-1问题:
设计一个方法,此方法可以接收A类的任意子类对象,并在主类中调用该方法。
首先不使用多态,这个问题,肯定需要使用重载来完成:

class A{                    // 定义类A
    public void fun1(){     // 定义fun1()方法
        System.out.println("A --> public void fun1(){}") ;
    }
    public void fun2(){
        this.fun1() ;       // 调用fun1()方法
    }
};
class B extends A{
    public void fun1(){     // 此方法被子类覆写了
        System.out.println("B --> public void fun1(){}") ;
    }
    public void fun3(){
        System.out.println("B --> public void fun3(){}") ;
    }
};
class C extends A{
    public void fun1(){     // 此方法被子类覆写了
        System.out.println("C --> public void fun1(){}") ;
    }
    public void fun5(){
        System.out.println("C --> public void fun5(){}") ;
    }
};
public class PolDemo04{
    public static void main(String asrgs[]){
        fun(new B()) ;  // 传递B的实例
        fun(new C()) ;  // 传递B的实例
    }
    public static void fun(B b){
        b.fun1() ;      // 调用覆写父类中的fun1()方法
    }
    public static void fun(C c){
        c.fun1() ;      // 调用覆写父类中的fun1()方法
    }
};
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
33
34
35
36
如果现在扩展功能,A类,有1000个子类,那就麻烦了,要增加很多个重载的功能方法,很不好。

使用对象的多态

class A{                    // 定义类A
    public void fun1(){     // 定义fun1()方法
        System.out.println("A --> public void fun1(){}") ;
    }
    public void fun2(){
        this.fun1() ;       // 调用fun1()方法
    }
};
class B extends A{
    public void fun1(){     // 此方法被子类覆写了
        System.out.println("B --> public void fun1(){}") ;
    }
    public void fun3(){
        System.out.println("B --> public void fun3(){}") ;
    }
};
class C extends A{
    public void fun1(){     // 此方法被子类覆写了
        System.out.println("C --> public void fun1(){}") ;
    }
    public void fun5(){
        System.out.println("C --> public void fun5(){}") ;
    }
};
public class PolDemo05{
    public static void main(String asrgs[]){
        fun(new B()) ;  // 传递B的实例
        fun(new C()) ;  // 传递B的实例
    }
    public static void fun(A a){
        a.fun1() ;      // 调用覆写父类中的fun1()方法
    }
};
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
33
这样的代码,无论A类有多少个子类都没问题。这个功能方法不需要进行修改。

总结: 
 
多态性总结。

3,instanceof关键字
3-1,什么时候使用instanceof关键字,这个关键字有什么作用?
其实对于这个问题,很简单,在Java中,可以通过instanceof关键字来判断,一个对象是哪一个类的实例。

格式: 对象 instanceof 类名称 —>返回内容是一个Boolean结果。
对于之前的问题:一个方法可以接受一个类的任意子类对象,并可以调用该方法的问题已经通过多态的向上转型得到了完美的解决;那么现在有一个新的问题:A的子类A extends B,继承了A的方法,同时自定义了一个新的方法fun3(),A extends C,自定义了一个新的方法fun5(),现在的需求是:——当传入的类的类的对象是B的实例的时候,让这个对象调用fun3,如果传入的对象是C的实例的时候就让它调用fun5,

对于这个需求,仅仅通过参数的多态就不够了,还需要在方法内部通过使用instanceof关键字对传入的对象进行判断,然后分别执行对应的方法。
    class A{                    // 定义类A
        public void fun1(){     // 定义fun1()方法
            System.out.println("A --> public void fun1(){}") ;
        }
        public void fun2(){
            this.fun1() ;       // 调用fun1()方法
        }
    };
    class B extends A{
        public void fun1(){     // 此方法被子类覆写了
            System.out.println("B --> public void fun1(){}") ;
        }
        public void fun3(){
            System.out.println("B --> public void fun3(){}") ;
        }
    };
    public class InstanceofDemo01{
        public static void main(String asrgs[]){
            A a1 = new B() ;        // 通过向上转型实例化对象   
            System.out.println("A a1 = new B():" + (a1 instanceof A)) ;     //true
            System.out.println("A a1 = new B():" + (a1 instanceof B)) ;     //true
            A a2 = new A() ;        // 通过向上转型实例化对象
            System.out.println("A a2 = new A():" + (a2 instanceof A)) ;   //true
            System.out.println("A a2 = new A():" + (a2 instanceof B)) ;    //FALSE
        }
    };
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
在开发中,对于向下转型,一定要进行转型验证,以避免classCastException。

class A{                    // 定义类A
    public void fun1(){     // 定义fun1()方法
        System.out.println("A --> public void fun1(){}") ;
    }
    public void fun2(){
        this.fun1() ;       // 调用fun1()方法
    }
};
class B extends A{
    public void fun1(){     // 此方法被子类覆写了
        System.out.println("B --> public void fun1(){}") ;
    }
    public void fun3(){
        System.out.println("B --> public void fun3(){}") ;
    }
};
class C extends A{
    public void fun1(){     // 此方法被子类覆写了
        System.out.println("C --> public void fun1(){}") ;
    }
    public void fun5(){
        System.out.println("C --> public void fun5(){}") ;
    }
};
public class InstanceofDemo02{
    public static void main(String asrgs[]){
        fun(new B()) ;
        fun(new C()) ;
    }
    public static void fun(A a){
        a.fun1() ;
        if(a instanceof B){
            B b = (B) a ;
            b.fun3() ;
        }
        if(a instanceof C){
            C c = (C) a ;
            c.fun5() ;
        }
    }
};
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
33
34
35
36
37
38
39
40
41
如果现在要新增子类,则肯定要修改fun方法,这样一来就失去了程序的灵活性, 
所以,开发中,程序设计的重点要放在父类的设计上,只有父类设计的足够合理, 
开发过程才会非常方便,就想基石必须夯实,高楼才能更高。

开发规则: 
一个类永远不要去继承一个已经实现好的类,而是最好去继承一个抽象类或者去实现一个接口。
--------------------- 
作者:费城之鹰 
来源:优快云 
原文:https://blog.youkuaiyun.com/jakezhang1990/article/details/68557710 
版权声明:本文为博主原创文章,转载请附上博文链接!

深入理解面向对象编程:继承与多态性 本篇博客深入探讨了面向对象编程中的继承和多态性概念。通过C++语言的示例,讲解了如何通过继承建立类之间的关系,包括public、protected和private继承的差异。同时,文章详细解释了多态性的实现方式,即通过虚函数和纯虚函数来定义接口,并展示了如何利用这些机制来扩展类的功能。通过具体的代码示例和运行结果,读者可以直观理解继承和多态性在实际编程中的应用。 阅读详情

相关推荐

深入理解多态性及其在面向对象编程中的优势

本文深入探讨了面向对象编程中的多态性原理及其带来的优势。通过具体的编程示例,展示了如何通过多态性提高代码的可读性、可维护性和可重用性。同时,也提到了面向对象编程的其他原则,如继承、封装、模块化、抽象化,以及它们如何共同作用于软件开发过程。最后,文章对面向对象编程语言进行了推荐,并指出了该范式的一些潜在缺点。

weixin_35757531的博客 337

课后练习题--第八题--

什么是多态,怎么使用多态 任务描述 :掌握对象的多态性。 相关知识 为了完成本关任务,你需要掌握: 1.什么是多态; 2.多态的实现条件; 3.多态的实现形式。 1.什么是多态 所谓多态:就是指一个类实例的相同方法在不同情形有不同表现形式。多态机制使具有不同内部结构的对象可以共享相同的外部接口。这意味着,虽然针对不同对象的具体操作不同,但通过一个公共的类,它们(那些操作)可以通过相同的方式予以调用。 多态就是同一个接口,使用不同的实例而执行不同操作 多态性是对象多种表现形式的体现。

qq_45823118的博客 3837

深入理解面向对象编程:类的继承与多态性

本文通过对书籍中类的继承和多态性相关章节的解读,探讨了面向对象编程中的继承机制和多态性的实现方式。文章详细分析了继承和重写方法的概念,以及如何通过类的派生来创建具有特定行为的子类。通过对特定编程示例的讨论,读者可以更好地理解如何在实际开发中应用这些概念。

weixin_31591833的博客 390

对象多态性

多态性严格来讲有两种描述形式:    方法的多态性:1.方法的重载:同一个方法名称会根据传入参数的类型及个数不同会执行不同的方法体2.方法的覆盖(重写):同一个方法会根据子类的不同,实现不同的功能  对象的多态性:指的是发生在继承关系类之中,子类和父类之间的转换问题1.向上转型(自动完成):父类 父类对象 = 子类实例;2.向下转型(强制转换):子类 子类对象 =(子类) 父类实例;     eg...

随便写写 3093

基于RYU+Mininet的SDN校园网络实战:从零搭建虚拟化实验环境

本文详细介绍了如何利用RYU控制器和Mininet搭建SDN校园网络实验环境,从Ubuntu虚拟机准备到网络拓扑设计,再到关键网络功能实现。通过实战案例展示SDN在校园网络中的应用优势,包括简化配置、提升效率等,为网络工程师和学生提供了一套完整的虚拟化实验方案。

weixin_30872499的博客 455

企业微信消息推送API实战:5步搞定可信IP与域名配置(含Python代码示例)

本文详细解析了企业微信消息推送API实战中的关键配置步骤,特别是可信IP与可信域名的配置流程。通过5个清晰步骤,结合Python代码示例,指导开发者快速完成安全通信链路搭建,避免常见错误,确保消息推送服务稳定可靠。

qsc9012345的博客 995

面向对象——多态

多态指同一个对象在不同情境下的多种表现形式。它分为对象的多态性和类型的多态性。对象的多态性:同一个对象可以被不同类型的引用指向,从而在不同情境下以不同方式使用。这体现了一个对象能够通过不同的名称和描述来表现自己。类型的多态性:同一类型的引用可以指向该类型的不同子类对象。在不同的情境下,可以使用同一个类型的引用来操作不同的对象实例。本质:在不同场景中,同一个方法调用可以有不同的实现。定义:抽象类是包含抽象方法的类,无法直接实例化。使用场景:用来捕获子类的通用特征和行为,实现代码复用。

venus_patton的博客 2052

视频帧插学习(三):ema-vfi代码拆解和分析

video interp EMA-VFI

mikhailbran的博客 708

面向对象的特征之三:多态性

编译,看左边;运行,看右边。

Kenyangi 1303

Zabbix7.4监控系统在Rocky Linux10.0上的完整部署流程(含MariaDB配置)

本文详细介绍了在Rocky Linux 10.0操作系统上部署企业级监控系统Zabbix 7.4的完整流程,并重点阐述了与MariaDB数据库的深度集成与性能优化配置。内容涵盖从系统环境准备、数据库安装与安全加固、Zabbix核心组件部署,到服务配置、Web界面初始化以及生产环境高级调优的全方位实战指南,旨在帮助用户构建稳定高效的监控平台。

weixin_29200741的博客 328

【Codesys】获取从站信息,判断是否从站断联,总线丢失

获取EtherCAT从站信息,判断是否从站断联,总线丢失

qq_35316470的博客 5731

面向对象的三大特征之一多态

1. 什么是多态 多态性是面向对象编程的又一个重要特征,它是指在父类中定义的属性和方法被子类继承之后,可以具有不同的数据类型或表现出不同的行为,这使得同一个属性或方法在父类及其各个子类中具有不同的含义。 对面向对象来说,多态分为编译时多态和运行时多态。其中编译时多态是静态的,主要是指方法的重载,它是根据参数列表的不同来区分不同的方法。通过编译之后会变成两个不同的方法,在运行时谈不上多态。而运行时多态是动态的,它是通过动态绑定来实现的,也就是大家通常所说的多态性。 简单的说就是 在通过父类来获取他名下继承

qq_28629389的博客 1819

F28335 DSP ePWM模块实战:从基础配置到电机控制

本文详细解析了TI TMS320F28335 DSP的ePWM模块,从基础概念、寄存器配置到实战应用。通过代码示例,手把手教你如何配置定时中断、生成PWM波形、实现死区保护与故障联防,并最终完成一个可调速、可换向的直流电机控制项目,是掌握F28335电机控制核心技术的实战指南。

g5h6i的博客 1127

java面向对象14多态性与instanceof关键字的理解

/* java面向对象三大特性之多态性 1,多态性可以理解为一个事物的多种形态 2,对象的多态性:父类的引用指向子类的对象或者说子类的对象赋给父类的引用。 3,多态的使用:虚拟方法调用 子类中定义了与父类同名同参数的方法,在多态情况下,将此时父类的方法称为虚拟方法,父 类根据赋给它的不同子类对象,动态调用属于子类的该方法。这样的方法调用在编译期是无法 确定的。所以多态性是运行时行为,而非编译时行...

wisdomcodeinside的博客 294

Unity Android构建报错:compileSdk 35兼容性五层定位法

Android构建中的compileSdk是编译时API目标版本,其升级并非孤立操作,而是触发JDK、Android Gradle Plugin(AGP)、NDK、targetSdk与Unity引擎版本之间强耦合校验的起点。当出现'using a newer Android Gradle plugin to use compileSdk = 35'类报错,本质是代际技术栈错配——例如AGP 7.1.3不识别compileSdk 35所需Java 17语法,或NDK 21与AGP 7.4的ABI规范冲突。该问

weixin_32496547的博客 568

Python爬虫实战:中国土地市场网招拍挂数据抓取与分析

本文详细介绍了如何使用Python爬虫技术从中国土地市场网抓取土地招拍挂数据,并进行初步的数据分析与可视化。文章涵盖了爬虫的基本原理、反爬虫策略应对、数据清洗与存储、数据分析与可视化等多个方面,为土地市场研究者提供了一套完整的数据获取与分析解决方案。

2201_76125261的博客 684

用实例详解Java中的类、对象、继承及多态性,一文理解Java类和对象、多态性的概念

/ 成员变量int age;// 构造方法// 成员方法System.out.println("汪汪汪!");在这个例子中,Dogbreedage和color,以及一个构造方法和一个成员方法bark。在Java中,使用extends// 新的成员变量// 新的构造方法// 调用父类构造方法// 新的成员方法System.out.println("捡回来了!");在这个例子中,类继承了Dog类,并添加了新的成员变量isTrained和新的成员方法fetch。

码农超哥的博客 1160

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Java面向对象之多态性的理解

多态性的使用 理解多态:可以理解为一个事物的多种形态 何为多态性: ​ 对象的多态性: 父类的引用指向子类的对象(或 子类的对象赋给父类的引用) 多态的使用,虚拟方法调用 ​ 有了对象的多态性以后,我们在编译期,只能调用父类中声明的方法,但在运行期我们实际执行的是子类重写父类的方法 总结: 编译看左边,运行看右边 多态性的使用前提 类的继承关系 方法重写 对象的多态性只适用于方法 ,不适用于属性(编译和运行都看左边 引用一句Bruce Eckel的话:“不要犯傻,如果它不是晚绑定,它就不是多态) ..

qq_41921196的博客 383

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

对面向对象多态性的一点简单理解

1.多态的前提:类的继承,方法的重写 没有继承性,就谈不上多态性,继承是多态的前提。所有需要先了解继承才能更好的了解多态。 没有方法的重写,多态就没有什么意义。 多态性的使用前提: ① 类的继承关系 ② 方法的重写 2.多态性的理解:可以理解为一个事物的多种形态。 简单举例: ①各国人都属于人类,都继承自人类中说话这个方法,但是中国人说活说出的中国话,日本人说出的是日本话,其它国家说的也是各自的母语,同样继承的方法却表现出不同的形态,这就是多态性。 ②再举一个例子,猫和狗都属于动物类,都有发

qq_57334289的博客 379

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

如何理解面向对象的多态性

什么是多态 同一个行为具有多个不同表现形式或形态的能力就是多态。 多态分类 多态一般分为两种:重写式多态和重载式多态。 重载式多态,也叫编译时多态。也就是说这种多态再编译时已经确定好了。重载大家都知道,方法名相同而参数列表不同的一组方法就是重载。在调用这种重载的方法时,通过传入不同的参数最后得到不同的结果。 重写式多态,也叫运行时多态。这种多态通过动态绑定(dynamic binding)技术来实现,是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。也就是说,只有程序运行起来,你才

落日长烟 1560

Java 对象的多态性——必须画图理解

引用多态(向上转型) 父类的引用可以指向本类的对象 父类的引用可以指向子类的对象(动态绑定) Outer in=new Outer(); Outer out=new Inner(); //指向子类的对象 一个引用调用的是哪个方法,取决于这个引用所指向的对象 class Outer{ public String A="我"; public void say(){ System.ou...

那时候的坚持不懈的我的博客 907

关于理解Java中的多态性,父类引用创建子类对象

好几次都想起这个问题,每次想到都要脑子里面就要思考一番今天就做一个小笔记拿百度上的一个例子父类A,子类BA a=new B();①加入A是一个接口或者抽象类,那么不可以创建对象,用起引用去指向其他子类或实现类来创建对象是可以的具体来说,假如一个类需要实现各种水果,香蕉,苹果等,有共同的方法eat()就必须给每一个类写一个方法public void eat(Banana banana)public ...

toby1123yjh的博客 2009

面向对象(中)--- 多态性的理解和使用

多态性的使用 理解多态性:可以理解为一个事物的多种形态 何为多态性: 对象的多态性:父类的引用指向子类的对象(或子类的对象赋给父类的引用) 多态的使用:虚拟方法调用 有了对象的多态性以后,我们在编译期,只能调用父类中声明的方法,但在运行期,我们实际执行的是子类重写父类的方法。 总结:编译看左边,执行看右边 多态性的使用前提: 要有类的继承关系 要有方法的重写 //对象的多态性 Person student = new Student(); //多态的使用:当调用子父类同名同参数的方法

岁月平添了我的愁 301

Java中的多态性:理解和应用面向对象的核心概念

在Java中,多态性主要指的是一个引用类型(如父类的引用)可以指向不同类型的对象(如子类的实例),并且可以通过这个引用调用在不同类型的对象中具体实现的方法。- **接口**:通过实现接口,不同的类可以有不同的实现方式,同一个接口引用可以指向实现了该接口的任何对象。- **接口的一致性**:多态性使得不同的对象可以通过同一个接口进行操作,简化了编程模型。- **继承**:子类继承父类,子类可以拥有父类的属性和方法,并能添加或覆盖父类的方法。- **方法重写**:子类可以重写继承自父类的方法,提供具体的实现。

youmashengyue的博客 435

Java多态性详解——父类引用子类对象-理解-1

面向对象编程有三个特征,即封装、继承和多态。   封装隐藏了类的内部实现机制,从而可以在不影响使用者的前提下改变类的内部结构,同时保护了数据。   继承是为了重用父类代码,同时为实现多态性作准备。那么什么是多态呢?   方法的重写、重载与动态连接构成多态性。Java之所以引入多态的概念,原因之一是它在类的继承问题上和C++不同,后者允许多继承,这确实给其带来的非常强大的功能,但是

每天进步一点点 611
上一篇: SVN版本冲突,COMMIT时出现.MINE等文件
下一篇: angular项目中各个文件的作用
scnuwilliams
博客等级 码龄10年 32粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值