java第五章:面向对象(oop)三大特性之多态
多态(把代码写活,提高代码的扩展性和可维护性)
生活中的多态:同一种物质,因不同的环境展现不同的形态(水:气态,液态,固态/碳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)三大特性之多态相关推荐
- Java学习笔记二十五:Java面向对象的三大特性之多态
Java面向对象的三大特性之多态 一:什么是多态: 多态是同一个行为具有多个不同表现形式或形态的能力. 多态就是同一个接口,使用不同的实例而执行不同操作. 多态性是对象多种表现形式的体现. 现实中,比 ...
- polymorphism java_Java基础-面向对象第三大特性之多态(polymorphism)
Java基础-面向对象第三大特性之多态(polymorphism) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.多态概述 多态是继封装,继承之后,面向对象的第三大特性,多态的 ...
- 面向对象的三大特性之多态
面向对象的三大特性之多态 文章目录 面向对象的三大特性之多态 前言 一.静态多态 1.函数重载 2.函数模板 二.动态多态 1.函数重写 2.虚函数的继承特性 三.重定义 前言 多态的简单定义为同一种 ...
- Java第五章——面向对象(二)
第五章面向对象(中) 1.访问控制修饰符 2.继承 3.组合 4.重载 5.覆盖(覆写) 重点: 封装(java访问控制权限) 继承(定义.子类访问控制权限) 类的组合的实现(与继承的区别) 多态(重 ...
- 面向对象的三大特性之多态,封装基础
面向对象的三大特性 : 继承 多态 封装 多态:一个类表现出多种形态:通过继承来实现的 在python中:由于函数的参数不需要指定数据类型,所以也不需要通过继承的形式来统一一组类的类型 ...
- C++ 面向对象程序三大特性之 多态
目录 多态的概念 多态的定义及使用 虚函数 虚函数的重写 虚函数重写的两个例外 C++11中 override 和 final 重载.重写.隐藏的区别与联系 抽象类 多态的原理 虚函数指针.虚函数.虚 ...
- OOP三大特性之多态
官方描述:不同对象可以响应(调用)同一个方法,产生不同的结果 (对猫,狗,发出吃的命令时,猫去吃鱼,狗去吃骨头) 好处:提高程序的扩展性 具体的:父类建立一套规范,无需实现内部的方法,子类按照这套规范 ...
- Python面向对象编程三大特性之多态
多态 code:_9polymorphism.py # ***************************************** """ 多态:对于同一个方法, ...
- C++ 面向对象程序三大特性之 继承
目录 继承的概念 继承的定义及使用 继承方式和访问权限 基类和派生类对象的赋值转换 继承中的各成员的作用域 派生类的默认成员函数 构造函数 拷贝构造 赋值运算符重载函数 析构函数 继承与友元 继承与静 ...
- 【Golang第8章:面向对象编程】Go语言的结构体是什么,怎么声明;Golang方法的调用和声明;go语言面向对象实例,go语言工厂模式;golang面向对象的三大特性:继承、封装、多态
介绍 这个是在B站上看边看视频边做的笔记,这一章是Glang面向对象编程 这一章内容较多,内容有Go语言的结构体是什么,怎么声明:Golang方法的调用和声明:go语言面向对象实例,go语言工厂模式: ...
最新文章
- win7如何取消计算机管理员权限,win7如何删除需要管理员权限的文件夹
- 西门子获首都机场18亿大单
- MFC中滚动条slider和编辑框edit的联动
- JUnit规则–引发异常时执行附加验证
- vscode openOCD 配置Jlink 下载和调试STM32 教程
- TForm1*Form1=newTForm1(this); Form1-Show();
- 微信小程序时代,哪些人能赚到第一桶金
- [RMAN]控制文件的恢复
- 使用Calendar增加日期
- ASP.NET Core MVC 打造一个简单的图书馆管理系统 (修正版)(二)数据库初始化、基本登录页面以及授权逻辑的建立...
- 从《牛津高阶英汉词典》中提取单词(2)
- python翻转棋_Python算法做翻转棋子游戏
- Javaweb常用单词
- 模拟简单 LeetCode6070. 计算字符串的数字和
- [从零开始unity3D]“五子连珠”游戏实现,网格数组的创建(1)
- 2022全年度平板电视十大热门品牌销量榜单
- 11代i5 NUC使用记录
- 损坏Word文档的几种修复方法
- 一个疯子的梦-20190921
- 基于java的家教信息管理系统的设计与实现