Java单例模式继承覆盖多态原理详解

 更新时间:2020年09月28日 10:05:29   作者:爱笑的berg  
这篇文章主要介绍了Java单例模式继承覆盖多态原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

1、单例模式:

1)提出原因

  是由gof 也就是四人组提出来的。为了保证jvm中某一类型的java对象永远只有一个,同时也是为了节省内存的开销。因为外面程序可以通过new的方法直接调用类里面的构造方法。导致该类的对象不止一个。

2)定义

  单例模式的意思就是只有一个实例。单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。

A、构造方法私有化;

B、对外提供一个公开的、静态的、获取当前类型对象的方法

C、提供一个当前类型的静态变量。

3)分类

A、饿汉式单例模式:在类加载时就完成了初始化,所以类加载较慢,但获取对象的速度快

public class CustomerSingleton {
  private static CustomerSingleton instance = new CustomerSingleton();//静态私有成员,已初始化
  
  private CustomerSingleton()
  {
    //私有构造函数
   System.out.println("私有构造函数执行");
  }
  
  public static CustomerSingleton getCustomerInstance()  //静态,不用同步(类加载时已初始化,不会有多线程的问题)
  {
    return instance;
  }
}

B、懒汉式单例:类加载时不初始化

当调用getInstance方法的时候,底层的对象才会考虑创建,所以显得比较懒

public class UserSingleton {
   //提供一个当前类型的静态变量
   public static UserSingleton intance=null;
 
   //构造方法私有化
   private UserSingleton(){
    System.out.println("构造函数私有化");
   }
 
   //对外提供一个公开获取Singleton 对象的方法
   public static UserSingleton getInstance(){
     if(intance==null){
      intance=new UserSingleton();
   }
    return intance;
   }
}

2、继承

1)继承的语法:java中类只支持单继承,一个类继承了A类就无法再继承B类,继承是面向对象的重要概念。一个类没有现实的继承其他类,默认继承sun提供的java.lang.object

   [修饰符列表] class 子类名 extends 父类名{
    类体;

  }

备注:

java语言中子类继承父类,会将父类中所有的数据全部继承,包括私有的也能继承过来;

但是在子类中无法直接访问父类中的私有数据。但是可以间接访问,构造方法无法被子类继承。

3、方法的覆盖

1)什么时候方法要进行覆盖?

如果父类中的方法已经无法满足当前子类的业务需求,需要将父类中的方法进行覆盖重新子类如果重写父类的方法之后,子类对象一定调用的是重写之后的方法。覆盖指的是成员方法和成员变量无关。

2)发生方法覆盖的条件:

  • 第一:发生在具有继承关系的两个类之间
  • 第二:必须具有相同的方法名,相同的返回值类型,相同的参数列表
  • 第三:重写的方法不能比被重写的方法拥有更低的访问权限
  • 第四:重写的方法不能比被重写的方法抛出更宽泛的异常
  • 第五:私有的方法不能被覆盖(因为私有方法无法被子类访问,所以不能重写;必须是public的方法才能被覆盖,如果定义成了final是不可以被重写的)
  • 第六:构造方法无法被覆盖,因为构造方法无法被继承。
  • 第七:静态的方法不存在覆盖
  • 第八:覆盖指的是成员方法,和成员变量无关。

4、多态

向上转型:子转父(父类型的引用,指向子类型的对象);

向下转型:父转子(子类型的引用,指向父类型的对象);

多态编译期是静态绑定,而运行期是动态绑定

5、多态的经典例子

public class Person {
   public void feed (Animal a){
    a.eat();
   }
}

public class Animal {
   public void eat(){
 
   }
}

public class Dog extends Animal {
   public void eat(){
     System.out.println("狗在吃肉");
   }
}

public class Cat extends Animal {
   public void eat(){
     System.out.println("猫在吃鱼");
   }
}

public class Test01 {
   public static void main(String[] args) {
     Person p1=new Person();
      Dog d1=new Dog();
     Cat c1=new Cat();
     p1.feed(d1);
     p1.feed(c1);
   }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • SpringBoot中@PostConstruct 注解的实现

    SpringBoot中@PostConstruct 注解的实现

    在Spring Boot框架中, @PostConstruct是一个非常有用的注解,它用于在依赖注入完成后执行初始化方法,本文将介绍 @PostConstruct的基本概念、使用场景以及提供详细的代码示例,感兴趣的可以了解一下
    2024-09-09
  • gateway网关与前端请求跨域问题的解决方案

    gateway网关与前端请求跨域问题的解决方案

    这篇文章主要介绍了gateway网关与前端请求跨域问题的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • SpringBoot实现接口文档自动生成的方法示例

    SpringBoot实现接口文档自动生成的方法示例

    在开发Web应用程序时,接口文档是非常重要的一环,本文主要介绍了SpringBoot实现接口文档自动生成的方法示例,具有一定的参考价值,感兴趣的可以了解一下
    2023-10-10
  • jmeter压力测试工具简介_动力节点Java学院整理

    jmeter压力测试工具简介_动力节点Java学院整理

    这篇文章主要为大家详细介绍了jmeter压力测试工具相关介绍资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • Java Arrays.fill()的具体使用

    Java Arrays.fill()的具体使用

    本文主要介绍了Java Arrays.fill()的具体使用,更好地理解Arrays.fill()方法的用法以及在实际应用中如何使用它,感兴趣的可以了解一下
    2023-09-09
  • java final本质详解

    java final本质详解

    在本篇文章里小编给大家分享的是关于java final本质的相关知识点内容,有需要的朋友们可以参考下。
    2019-09-09
  • java 和 json 对象间转换

    java 和 json 对象间转换

    这篇文章主要介绍了java 和 json 对象间转换,需要的朋友可以参考下
    2014-03-03
  • Java 方法的重载与参数传递详解

    Java 方法的重载与参数传递详解

    在java中,方法就是用来完成解决某件事情或实现某个功能的办法。方法实现的过程中,会包含很多条语句用于完成某些有意义的功能——通常是处理文本,控制输入或计算数值,这篇文章我们来探究一下方法的重载与传参
    2022-04-04
  • Springboot整合RabbitMQ实现发送验证码的示例代码

    Springboot整合RabbitMQ实现发送验证码的示例代码

    这篇文章主要介绍了Springboot整合RabbitMQ实现发送验证码的功能,基于AMQP协议实现的消息队列,它是一种应用程序之间的通信方法,消息队列在分布式系统开 发中应用非常广泛,需要的朋友可以参考下
    2022-02-02
  • SpringMVC4.3 HttpMessageConverter接口实现源码分析

    SpringMVC4.3 HttpMessageConverter接口实现源码分析

    这篇文章主要为大家介绍了SpringMVC4.3 HttpMessageConverter接口实现源码分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09

最新评论