博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java第五章:面向对象(oop)三大特性之多态
阅读量:6620 次
发布时间:2019-06-25

本文共 2162 字,大约阅读时间需要 7 分钟。

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

生活中的多态:同一种物质,因不同的环境展现不同的形态(水:气态,液态,固态/碳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 {    @Override    public void cut() {        System.out.println("我是石斧,砍日本人钝!");    }}package cn.zzsxt.demo7.factory.copy;//创建铁斧子类public class SteelAxe extends AXE{    @Override    public 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

你可能感兴趣的文章
JFinal 开发的轻量级商城系统 JFinalShop 1.0 发布
查看>>
FastAdmin 极速后台管理框架 1.0.0.20190301_beta
查看>>
Nginx-静态资源
查看>>
OC与JS之间的互调
查看>>
转载: iOS之ProtocolBuffer搭建和示例demo
查看>>
Fescar 发布 0.3.1 版本, 支持 ZooKeeper 注册中心
查看>>
网站优化中四个常见的优化难题及解决方法!
查看>>
继“换帅”之后,通用电气又将出售智能平台业务
查看>>
【死磕 Spring】----- IOC 之解析 bean 标签:BeanDefinition
查看>>
Java部署环境搭建(Linux)
查看>>
使用 will-change 来提升浏览器渲染效果
查看>>
Animation总结(差值器和估值器)
查看>>
Java数据结构与算法(十)-图
查看>>
4.1 在SELinux中客体类存在的目的
查看>>
如何用iPad运行Python代码?
查看>>
PHP学习3——数组
查看>>
E-HPC支持多队列管理和自动伸缩
查看>>
Maven的插件:命令行执行
查看>>
各种设备的CSS3MediaQuery整理及爽歪歪写法
查看>>
CVE-2017-8464远程命令执行漏洞(震网漏洞)复现
查看>>