六、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);
}
}
更多设计模式理解,可参看博文:https://www.cnblogs.com/jiarui-zjb/p/9637308.html
六、java基础-单例模式_继承_覆盖_多态的更多相关文章
- Java基础教程(18)--继承
一.继承的概念 继承是面向对象中一个非常重要的概念,使用继承可以从逻辑和层次上更好地组织代码,大大提高代码的复用性.在Java中,继承可以使得子类具有父类的属性和方法或者重新定义.追加属性和方法. ...
- Java基础笔记-抽象,继承,多态
抽象类: abstract修饰 抽象方法必须定义在抽象类中,抽象类不能创建对象. 在抽象方法中可以不定义抽象方法,作用是:让该类不能建立对象. 特点是: 1.定义在抽象类中 2.方法和类都用abstr ...
- Java基础学习笔记七 Java基础语法之继承和抽象类
继承 继承的概念 在现实生活中,继承一般指的是子女继承父辈的财产.在程序中,继承描述的是事物之间的所属关系,通过继承可以使多种事物之间形成一种关系体系. 例如公司中的研发部员工和维护部员工都属于员工, ...
- Java基础-封装和继承
@ 目录 Java基础知识(封装和继承) 一. 封装 1.1 封装的目的 1.2 封装的好处 1.3 封装的步骤 1.4 封装的例子 1.5 小结 二. 继承 2.1 继承的介绍 2.2 生活中的继承 ...
- Java基础系列 - 抽象类继承和接口实现
package com.inter; /** * 继承和接口的关系,单继承,多接口 * java不支持多继承,但可通过接口实现多重继承 */ public class test2 { public s ...
- Java基础第一天--继承、修饰符
继承 继承的概述: 继承是面向对象三大特征之一.可以使得子类具有父类的属性和方法,还可以在子类中重新定义,追加属性和方法. //创建父类 public class Fu{ public void sh ...
- C#和Java的类、继承、重写与多态
面向对象的三大特性是封装.继承.多态,C#和Java都是面向对象的语言所以他们的类.继承.重写与多态有很多共同点,但是实现上也存在一定的区别.其中Java中其实没有虚函数的概念,也可以认为Java的函 ...
- java 三大特性_继承、封装、多态_day005
一.继承: java的三大特性之一.两个类之间通过extends关键字来描述父子关系,子类便可拥有父类的公共方法和公共属性.子类可以继承父类的方法和属性,子类也可以自己定义没有的方法或者通过覆盖父类的 ...
- java基础知识总结--继承和接口
什么是继承?什么是接口?他们之间的区别和联系是什么? 什么是继承? 继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能.多个类中存在相同属性和行 ...
随机推荐
- WCF全面解析之三 使用配置文件启动WCF服务
知识:WCF地址.WCF绑定 Endpoint的配置 服务的三要素(ABC) A:Address 地址 有传输方式信息 B:Binding 怎么做(与地址的传输方式要匹配) C:Contract 做什 ...
- 图解 Kafka 水印备份机制
高可用是很多分布式系统中必备的特征之一,Kafka 日志的高可用是通过基于 leader-follower 的多副本同步实现的,每个分区下有多个副本,其中只有一个是 leader 副本,提供发送和消费 ...
- python两个_多个字典合并相加
这只是符合比较正常的需求和场景. #一.适用合并两个字典(key不能相同否则会被覆盖),简单,好用. A = {'a': 11, 'b': 22} B = {'c': 48, 'd': 13} #up ...
- MS17_010漏洞攻击Windows7
攻击主机系统:Kali Linux 2018 目标主机系统:Windows7 x64 1.攻击主机启动Metasploit: msfconsole 2.查找MS17_010漏洞相关的信息: searc ...
- CentOS7安装jenkis
注意:终止运行Ctrl+c , 退回到shell命令Ctrl+d 一.先检查是否有java [root@huangyh huangyh]# rpm -qa |grep java 或 java 因为C ...
- RobotFramework+Selenium2环境搭建与入门实例
一.安装包 1.Python(推荐使用ActivePython,这个版本PATH已经配好了,也安了一些像pip这样的包) ActivePython-2.7.2.5-win32-x86.msi 2.Wx ...
- idea 启动java项目报错 java: 程序包javax.servlet.http不存在
File -- Project Structure
- GO ERR
o 语言通过内置的错误接口提供了非常简单的错误处理机制. error类型是一个接口类型,这是它的定义: type error interface { Error() string } 我们可以在编码中 ...
- 小程序云函数调用http或https请求外部数据
参考网址 https://blog.csdn.net/qiushi_1990/article/details/101220920 小程序云函数调用http或https请求外部数据 原创编程小石头 发布 ...
- ANSYS 瞬态热分析---零件在水中冷却
目录 1. 案例 2. APDL分析 1. 案例 一个温度为300℃的铜环和一个温度为200℃的铁环,放置到22℃的水中进行淬火.水桶为铁质的圆形.分析中忽略水的流动. 材料参数 热性能 铜 铁 水 ...