多态(把代码写活,提高代码的扩展性和可维护性)

生活中的多态:同一种物质,因不同的环境展现不同的形态(水:气态,液态,固态/碳12:金刚石,石墨)

程序中的多态:同一个“接口”因不同的实现,而执行不同的操作(就是在方法中把父类作为形式参数传入,调用的时候,传入子类的实例,最终执行的是子类中重写父类的方法)

多态一般结合方法重写、继承使用,父类引用指向子类;

多态实现步骤:

1.实现继承

2.编译时将父类作为形式参数类型传入(范围大一点,模糊一点)

3.运行时将子类new出的实例传入,最终执行的是子类中重写父类的方法。

类型的转换

1.子类转换为父类,称为自动转换,也叫向上转型

eg: Animal animal = new Dog();

注意:向上转型完之后,animal只能访问父类中的属性和方法,子类中自有的属性和方法无法访问,调用的是子类中重写父类后的方法;

2.父类转换为子类,称为强制转换,也叫向下转型

eg: Animal animal  = new Dog();

  Dog dog = (Dog)animal;        此时dog只能调用子类中的属性和方法,无法访问父类中的属性和方法。

final关键字,最终的意思

1.修饰变量,该变量就成了常量,不能重新被赋值

2.修饰方法,该方法不能被重写(在子类中)

3.修饰类,该类不能被继承(eg:java.lang包中的Math类和String类)

abstract关键字,抽象的意思

抽象方法:使用abstact修饰的方法,最显著的特点是没有方法体,就是提供给子类重写用的一种规范。(可以abstract void test(),也可以public/protected abstract void test());

抽象类:使用abstract修饰的类,抽象类中可有可无抽象方法,可以有属性和构造方法。但是不能被实例化(不能new),天生为继承而生Animal animal = new Dog();

有抽象方法的类,一定是抽象类,必须是抽象类,要不然会报错。

抽象类的作用:防止编写程序的随意性,提供一种规范;

java中的设计模式(GOF),23种,是前人对经典问题总结出来的解决方案

单例模式:一个类只能创建一个实例对象,实现方法:构造方法私有化,提供一个共有的静态方法获取实例。

实现方式:1.饿汉式   2.懒汉式

简单工厂模式(静态工厂方法):可以生产产品,可以降低因生产产品而导致的耦合性过强(解耦合);

实现方式:1.编写父类和子类或接口和实现类

     2.编写静态工厂方法,返回值类型是父类或接口——>多态;

     3.根据用户的需求,动态创建子类对象,并返回

package cn.zzsxt.demo7.factory;
//创建父类
public abstract class AXE {public abstract void cut();
}package cn.zzsxt.demo7.factory;
//创建石斧子类
public class StoneAxe extends AXE {@Overridepublic void cut() {System.out.println("我是石斧,砍日本人钝!");}}package cn.zzsxt.demo7.factory.copy;
//创建铁斧子类
public class SteelAxe extends AXE{@Overridepublic void cut(){System.out.println("我是铁斧,砍日本人锋利!");}
}package cn.zzsxt.demo7.factory;
//创建静态工厂方法
public class AXEFactory {public static AXE getInstance(String str){AXE axe = null;if(str.equals("stone")){axe = new StoneAxe();}else if(str.equals("steel")){axe = new SteelAxe();}return axe;}public static void main(String[] args){AXE axe = AXEFactory.getInstance("stone");axe.cut();System.out.println("=========================");AXE axe2 = AXEFactory.getInstance("steel");axe2.cut();}
}

    

转载于:https://www.cnblogs.com/SXTzhaopengda/p/6957969.html

java第五章:面向对象(oop)三大特性之多态相关推荐

  1. Java学习笔记二十五:Java面向对象的三大特性之多态

    Java面向对象的三大特性之多态 一:什么是多态: 多态是同一个行为具有多个不同表现形式或形态的能力. 多态就是同一个接口,使用不同的实例而执行不同操作. 多态性是对象多种表现形式的体现. 现实中,比 ...

  2. polymorphism java_Java基础-面向对象第三大特性之多态(polymorphism)

    Java基础-面向对象第三大特性之多态(polymorphism) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.多态概述 多态是继封装,继承之后,面向对象的第三大特性,多态的 ...

  3. 面向对象的三大特性之多态

    面向对象的三大特性之多态 文章目录 面向对象的三大特性之多态 前言 一.静态多态 1.函数重载 2.函数模板 二.动态多态 1.函数重写 2.虚函数的继承特性 三.重定义 前言 多态的简单定义为同一种 ...

  4. Java第五章——面向对象(二)

    第五章面向对象(中) 1.访问控制修饰符 2.继承 3.组合 4.重载 5.覆盖(覆写) 重点: 封装(java访问控制权限) 继承(定义.子类访问控制权限) 类的组合的实现(与继承的区别) 多态(重 ...

  5. 面向对象的三大特性之多态,封装基础

    面向对象的三大特性  :  继承    多态    封装 多态:一个类表现出多种形态:通过继承来实现的 在python中:由于函数的参数不需要指定数据类型,所以也不需要通过继承的形式来统一一组类的类型 ...

  6. C++ 面向对象程序三大特性之 多态

    目录 多态的概念 多态的定义及使用 虚函数 虚函数的重写 虚函数重写的两个例外 C++11中 override 和 final 重载.重写.隐藏的区别与联系 抽象类 多态的原理 虚函数指针.虚函数.虚 ...

  7. OOP三大特性之多态

    官方描述:不同对象可以响应(调用)同一个方法,产生不同的结果 (对猫,狗,发出吃的命令时,猫去吃鱼,狗去吃骨头) 好处:提高程序的扩展性 具体的:父类建立一套规范,无需实现内部的方法,子类按照这套规范 ...

  8. Python面向对象编程三大特性之多态

    多态 code:_9polymorphism.py # ***************************************** """ 多态:对于同一个方法, ...

  9. C++ 面向对象程序三大特性之 继承

    目录 继承的概念 继承的定义及使用 继承方式和访问权限 基类和派生类对象的赋值转换 继承中的各成员的作用域 派生类的默认成员函数 构造函数 拷贝构造 赋值运算符重载函数 析构函数 继承与友元 继承与静 ...

  10. 【Golang第8章:面向对象编程】Go语言的结构体是什么,怎么声明;Golang方法的调用和声明;go语言面向对象实例,go语言工厂模式;golang面向对象的三大特性:继承、封装、多态

    介绍 这个是在B站上看边看视频边做的笔记,这一章是Glang面向对象编程 这一章内容较多,内容有Go语言的结构体是什么,怎么声明:Golang方法的调用和声明:go语言面向对象实例,go语言工厂模式: ...

最新文章

  1. win7如何取消计算机管理员权限,win7如何删除需要管理员权限的文件夹
  2. 西门子获首都机场18亿大单
  3. MFC中滚动条slider和编辑框edit的联动
  4. JUnit规则–引发异常时执行附加验证
  5. vscode openOCD 配置Jlink 下载和调试STM32 教程
  6. TForm1*Form1=newTForm1(this); Form1-Show();
  7. 微信小程序时代,哪些人能赚到第一桶金
  8. [RMAN]控制文件的恢复
  9. 使用Calendar增加日期
  10. ASP.NET Core MVC 打造一个简单的图书馆管理系统 (修正版)(二)数据库初始化、基本登录页面以及授权逻辑的建立...
  11. 从《牛津高阶英汉词典》中提取单词(2)
  12. python翻转棋_Python算法做翻转棋子游戏
  13. Javaweb常用单词
  14. 模拟简单 LeetCode6070. 计算字符串的数字和
  15. [从零开始unity3D]“五子连珠”游戏实现,网格数组的创建(1)
  16. 2022全年度平板电视十大热门品牌销量榜单
  17. 11代i5 NUC使用记录
  18. 损坏Word文档的几种修复方法
  19. 一个疯子的梦-20190921
  20. 基于java的家教信息管理系统的设计与实现

热门文章

  1. abel533 / ECharts
  2. 四种物联网卡计算模式
  3. 大败局:知名企业的失败教训
  4. 机器学习cae_“NVH机器学习”交流与数字化转型的探讨
  5. 分布式--CAP定理
  6. office2016安装记录
  7. 乌镇互联网大会——中国最成功的商人花一辈子才悟到的道理(转自知乎)
  8. 【Java】斗地主和斗牛游戏
  9. c++ 用 eigen与opencv计算两个向量的夹角,两个向量之间的夹角,向量的朝向
  10. 网易云课堂web安全学习第七天——了解url跳转漏洞