多态、多态的好处(扩展性)

2024-09-04 07:32
文章标签 多态 好处 扩展性

本文主要是介绍多态、多态的好处(扩展性),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

      • 多态
      • 多态中成员访问特点
        • 提醒:理解这些的时候要记得继承啊方法重写它们存在的意义所在。就好理解啦。
      • 多态的好处
      • c++中多态(理论结合实践的理解)

多态

1、多态:同一个对象,在不同时刻体现出来的不同状态。
2、多态的前提:
  1)要有继承关系实现关系(接口);
  2)要有方法重写
  3)要有父类或者父接口引用指向子类`Fu f= new Zi();
    注意:形参实参形式的(形参父类实参子类)
3、多态的分类:
  1)具体类多态

class Fu{}
class Zi extends Fu{}Fu f= new Zi()//父类引用指向子类

  2)抽象类多态(常用)

abstract class Fu{}
class Zi extends Fu{}Fu f= new Zi();//抽象父类引用指向子类

  3)接口多态(常用)

interface Fu{}
class Zi implements Fu{}Fu f= new Zi();//父接口引用指向子类

多态中成员访问特点

如,Fu f= new Zi();//左父类右子类

重点:成员方法,运行时,结果为子类重写的成员方法的结果。

  • 成员变量:编译看左边,运行看左边。
  • 构造方法:创建子类对象的时候,访问父类的构造方法,对父类的数据进行初始化。
  • 成员方法:编译看左边,运行看右边。(方法重写的意义)
  • 静态方法:编译看左边,运行看左边。静态和类相关,算不上重写,所以访问还是左边的。
提醒:理解这些的时候要记得继承啊方法重写它们存在的意义所在。就好理解啦。

多态的好处

提高了代码的维护性(继承保证);提高了代码的扩展性
原代码,不易扩展:
(借用本代码,也进一步理解一下工具类

//父类:动物类
class Animal{public void eat(){System.out.println("eat");}public void sleep(){System.out.println("sleep");}
}
//猫类
class Cat extends Animal{//方法重写public void eat(){System.out.println("狗吃肉");}//方法重写public void sleep(){System.out.println("狗坐着睡");}
}
//狗类
class Dog extends Animal{public void eat(){System.out.println("猫吃鱼");}public void sleep(){System.out.println("猫趴着睡");}
}//添加猪类
class Pig extends Animal{ //----------note:老忘记写extends!!!!!!!!!!public void eat(){System.out.println("猪吃白菜");}public void sleep(){System.out.println("猪躺着睡");}
}//针对动物操作的工具类
class AnimalTool{private AnimalTool(){}//最好把工具类的构造方法私有,防止别人创建该类的对象。该类是工具类。//调用猫的功能public static void feedCat(Cat c){  //工具类,方法就写成static的,然后直接在测试类:工具类名.方法 使用。c.eat();c.sleep();}//调用狗的功能public static void feedDog(Dog d){d.eat();d.sleep();}//添加猪的,调用猪的功能public static void feedDog(Dog d){d.eat();d.sleep();}}/*测试类测试类里面不放其他东西(如,定义其他方法)!只能是建对象,调方法。所以新定义了个操作动物的工具类去放feedCat(),feedDog()方法。
*/
class DuotaiTest{public static void main(String[] args){//我喜欢猫,我养3只猫Cat c= new Cat();Cat c2= new Cat();Cat c3= new Cat();AnimalTool.feedCat(c);AnimalTool.feedCat(c2);AnimalTool.feedCat(c3);//我喜欢狗,我养3只狗Dog d= new Dog();Dog d2= new Dog();Dog d3= new Dog();AnimalTool.feedDog(d);AnimalTool.feedDog(d2);AnimalTool.feesDog(d3);//我喜欢宠物猪//需要定义一个猪类,它继承自动物类,提供两个方法。且在工具类里添加方法。//我喜欢宠物兔、老虎、狼.....//若按上述添加猪的办法做,定义类,继承类,提供方法都是必须要的。//但是在工具类里面改过来改过去,不好。能否做到不改?//能。//见DuotaiTest2.java 中工具类的写法}
}

改进后:
采用多态后,易于扩展。
重点在:**用Fu f做形参接收参数,用Zi z的z做实参。有了父类引用指向子类。**即动物类引用指向各具体的动物类。同时又有方法重写,运行的时候肯定是个各子类重写的方法在起作用。从而利用多态实现好的扩展性。

/*多态的扩展性
*/
/*
程序输出结果:狗吃肉狗坐着睡狗吃肉狗坐着睡狗吃肉狗坐着睡---------------猫吃鱼猫趴着睡猫吃鱼猫趴着睡猫吃鱼猫趴着睡---------------猪吃白菜猪躺着睡*/
//父类:动物类
class Animal{public void eat(){System.out.println("eat");}public void sleep(){System.out.println("sleep");}
}
//猫类
class Cat extends Animal{public void eat(){System.out.println("狗吃肉");}public void sleep(){System.out.println("狗坐着睡");}
}
//狗类
class Dog extends Animal{public void eat(){System.out.println("猫吃鱼");}public void sleep(){System.out.println("猫趴着睡");}
}//添加猪类
class Pig extends Animal{ //----------note:老忘记写extends!!!!!!!!!!public void eat(){System.out.println("猪吃白菜");}public void sleep(){System.out.println("猪躺着睡");}
}//针对动物操作的工具类
class AnimalTool{private AnimalTool(){}//最好把工具类的构造方法私有,防止别人创建该类的对象。该类是工具类。/*-------------改动-----------------------*///注意:形参是Animal a,用动物接收。 到时候左边是 Fu f, 右边是Zi z, Fu f= Zi z public static void feedAnimal(Animal a){  //工具类,方法就写成static的,然后直接在测试类:工具类名.方法 使用。a.eat();   //成员方法:运行看右边:各子类的。( 不然干嘛方法重写)a.sleep();}}/*测试类测试类里面不放其他东西(如,定义其他方法)!只能是建对象,调方法。所以新定义了个操作动物的工具类去放feedCat(),feedDog()方法。
*/
class DuotaiTest2{public static void main(String[] args){//我喜欢猫,我养3只猫Cat c= new Cat();Cat c2= new Cat();Cat c3= new Cat();AnimalTool.feedAnimal(c);AnimalTool.feedAnimal(c2);AnimalTool.feedAnimal(c3);System.out.println("---------------");//我喜欢狗,我养3只狗Dog d= new Dog();Dog d2= new Dog();Dog d3= new Dog();AnimalTool.feedAnimal(d);AnimalTool.feedAnimal(d2);AnimalTool.feedAnimal(d3);System.out.println("---------------");//我喜欢宠物猪//需要定义一个猪类,它继承自动物类,提供两个方法。且在工具类里添加方法。//我喜欢宠物兔、老虎、狼.....//若按上述添加猪的办法做,定义类,继承类,提供方法都是必须要的。//但是在工具类里面改过来改过去,不好。能否做到不改?//能。//猫、狗、猪...都是动物,feedAnimal(Animal a)参数接收动物Pig p= new Pig();AnimalTool.feedAnimal(p);}
}

c++中多态(理论结合实践的理解)

如果你用的是c++的话,欢迎看我这篇非常用心的blogc++中多态由浅入深的理解:https://blog.csdn.net/u013317445/article/details/103498372,写得非常通俗易懂,原理上也写得非常清晰了。如果面试被问到的话,看了它肯定被问不倒啦。

the end.

这篇关于多态、多态的好处(扩展性)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1135382

相关文章

Serializable的好处

任何类型只要实现了Serializable接口,就可以被保存到文件中,或者作为数据流通过网络发送到别的地方。也可以用管道来传输到系统的其他程序中。这样子极大的简化了类的设计。 import java.io.Serializable;import java.util.Arrays;import java.util.HashMap;import java.util.Map;public

JavaSE——封装、继承和多态

1. 封装 1.1 概念      面向对象程序三大特性:封装、继承、多态 。而类和对象阶段,主要研究的就是封装特性。何为封装呢?简单来说就是套壳屏蔽细节 。     比如:对于电脑这样一个复杂的设备,提供给用户的就只是:开关机、通过键盘输入,显示器, USB 插孔等,让用户来和计算机进行交互,完成日常事务。但实际上:电脑真正工作的却是CPU 、显卡、内存等一些硬件元件。

请解释Java Web应用中的前后端分离是什么?它有哪些好处?什么是Java Web中的Servlet过滤器?它有什么作用?

请解释Java Web应用中的前后端分离是什么?它有哪些好处? Java Web应用中的前后端分离 在Java Web应用中,前后端分离是一种开发模式,它将传统Web开发中紧密耦合的前端(用户界面)和后端(服务器端逻辑)代码进行分离,使得它们能够独立开发、测试、部署和维护。在这种模式下,前端通常通过HTTP请求与后端进行数据交换,后端则负责业务逻辑处理、数据库交互以及向前端提供RESTful

java类中定义接口的有哪些好处

第一步:首先是是定义一个类,同时里面定义接口 public class Util { public interface Worker { void work(int a); } } 第二步:定义一个类去实现第一步类中定义的接口 public class Demo implements Worker { @Override public void work(int a) { System

【JVM】JVM栈帧中的动态链接 与 Java的面向对象特性--多态

栈帧 每一次方法调用都会有一个对应的栈帧被压入栈(虚拟机栈)中,每一个方法调用结束后,都会有一个栈帧被弹出。 每个栈帧中包括:局部变量表、操作数栈、动态链接、方法返回地址。 JavaGuide:Java内存区域详解(重点) 动态链接 动态链接:指向运行时常量池中该栈帧所属方法的引用。 多态 多态允许不同类的对象对同一消息做出响应,但表现出不同的行为(即方法的多样性)。 多态

java基础总结14-面向对象10(多态)

面向对象最核心的机制——动态绑定,也叫多态 1 通过下面的例子理解动态绑定,即多态 package javastudy.summary;class Animal {/*** 声明一个私有的成员变量name。*/private String name;/*** 在Animal类自定义的构造方法* @param name*/Animal(String name) {this.name = n

OOP三个基本特征:封装、继承、多态

OOP三个基本特征:封装、继承、多态 C++编程之—面向对象的三个基本特征 默认分类 2008-06-28 21:17:04 阅读12 评论1字号:大中小     面向对象的三个基本特征是:封装、继承、多态。     封装 封装最好理解了。封装是面向对象的特征之一,是对象和类概念的主要特性。   封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信

泛型第三课,自定义泛型、无多态、通配符、无泛型数组

泛型没有多态 package com.pkushutong.genericity4;/*** 多态的两种形式* 注:泛型没有多态* @author dell**/public class Test01 {public static void main(String[] args) {Fruit f = new Fruit();test(new Apple());}//形参使用多态publi

Python中的方法重写与多态:解锁编程的无限可能

在编程的世界里,灵活性与扩展性往往是衡量一个语言是否强大、易于维护的关键指标。Python,作为一种被广泛使用的高级编程语言,不仅以其简洁易读的语法赢得了众多开发者的喜爱,更因其支持多种面向对象特性而备受青睐。其中,“方法重写”与“多态”便是两个核心概念,它们不仅能够极大地提高代码的复用性和可维护性,还能帮助我们构建更加灵活、健壮的软件系统。本文将通过一系列由浅入深的例子,带你一起探索这两个概念的

《C++中的面向对象编程三大特性:封装、继承与多态》

在 C++编程的广阔世界中,面向对象编程(Object-Oriented Programming,OOP)的三大特性——封装、继承和多态,犹如三把强大的利器,帮助程序员构建出高效、可维护和可扩展的软件系统。本文将深入探讨如何在 C++中实现这三大特性,并通过具体的代码示例展示它们的强大之处。 一、封装(Encapsulation) 封装是将数据和操作数据的方法封装在一个类中,以实现信息隐藏和数