当前位置: 首页 > 编程日记 > 正文

java 基础---继承

继承

一,概述

a)         使用extends关键字可以让一个类继承另一个类,继承的类为子类,被继承的类是父类,子类会自动继承父类的所有方法和属性。

b)        继承使得类和类之间产生了关系

c)        子类可以使用super调用父类成员

d)        继承的最终目的就是提高代码的复用性。

e)         当发现一个类的功能不行时, 就可以派生子类增加方法。

什么时候定义继承呢?

当类与类之间有所属( is  a )关系时,就会继承。

一个类是一个另一个类中的一种。比如:苹果是水果的一种。

继承中子父类中成员的特点:

1,成员变量。

当子父类出现同名变量时,可以使用super关键字区分。

一般这种情况很少见,因为父类已经定义了,子类就没有必要在定义了。

而且父类中的属性都是私有的,子类也无法直接访问。

2,成员函数。

当子父类中出现一模一样的函数时,就出现了覆盖的操作。

所谓覆盖,其实是子类对象在使用时,运行的是子类的函数。

好像父类的被覆盖一样。所以就形象成为函数的覆盖,这是函数的另一个特性。

什么时候使用覆盖呢?

当父类的功能需要修改或者升级时,直接修改父类中的代码,并不利于后期的扩展和维护。

可以定义一个子类对父类的功能进行覆盖。

沿袭父类的功能定义,重写功能的主体内容。

这样就提高扩展性和维护性。

手机的例子:来电显示功能。

覆盖的注意事项:

1,子类覆盖父类必须权限大于等于父类的权限。

2,静态只能覆盖静态。

3,构造函数

子类的所有构造函数默认都会访问父类中空参数的构造函数。

因为子类的所有的构造函数的默认第一行都有一个隐式的语句,super();

为什么一定要调用父类构造函数呢?

因为子类获得父类中的数据,需要父类先对数据进行初始化。

当父类中没有空参数的构造函数时,子类就没有办法使用隐式的super();访问父类中的构造函数,这时可通过手动用this或super语句来指定要访问的构造函数。

这就是子类实例化的过程。

this和super在用法上很相像,

可以使用这两个关键字调用属性,调用行为,区分同名属性,区分同名行为。

可调用构造函数。

但是有着本质的区别:

this指向的是一个本类对象。

super并没有指向一个对象,而仅仅代表父类的空间,应该算是父类空间的一个标识引用。

继承的弊端:打破了封装性。

解决方式可通过final关键字完成。

final关键字的出现其实是提高程序的严谨,让不允许改变的内容固定下来。

特点:

1,  final修饰类,函数,变量(类变量,实例变量,局部变量)

2,  final修饰的类不可被继承。

3,  final修饰的方法不可被复写。

4,  final修饰的变量是一个常量,只能被赋值一次。

对于参与运算不变的数据,通常都会定义一个常量将该数据记录下来。

目的是给该数值起一个名字,方便使用和阅读。

常量定义规范:所有的字母都大写,多个单词用_相连。通常成员常量都是静态的。

如何设计好继承

1,  把通用操作与方法放在父类中,因为一个父类可以有好几个子类。如果是通用的操作,放在父类中,带来的好处是多方面的,一是,避免代码重复,二,避免了人为因素导致的不一致。

2,  不要使用受保护字段,也就是Pritected字段。

3,  尽管类的继承给开发带来了好处和方便,但如果不希望自己的类在被扩展,也就不希望再产生子类时,可以在类的前面加上final。

向上转型

当用一个父类类型的变量在记录子类对象时,子类对象会自动提升为父类的类型。

设计模式

解决某一类问题行之有效的方式;java中共有23种。是一种解决问题的思想。

单列模式

保证一个类在内存中只有一个对象,也就保证了对象的唯一性。

什么时候要保证一个类中只有一个对象呢?

在java中只要建立对象就能获取对象中的所有的方法和属性。

思路:

1,  不让其他程序建立该类的对象。

2,  在本类中建立一个本类对象。

3,  将自定义的对象对外提供出去,让其他程序访问。

步骤,

1,  将构造函数私有化,不提供其他程序创建对象的初始化。

2,  new一个本类对象,私有并静态。

3,  定义一个公有的静态方法返回该对象,让其他程序可以调用。

饿汉式

public class SingleDemo {

private static SingleDemo s= new SingleDemo();

private SingleDemo(){}

public static SingleDemo getInstance()

{

return s;

}

}

懒汉式;属于对象的延迟加载,对于多线程并发访问getInstance方法,会出现安全隐患。

class SingleDemo

{

private static SingleDemo s=null;

private SingleDemo(){}

public static SingleDemo getInstance()

{

if(s==null)

s=new SingleDemo();

return s;

}

}

优化了安全问题                          我不懂的地方。

class SingleDemo {

private static SingleDemo s = null;

private SingleDemo() {

}

public static SingleDemo getInstance() {

if (s == null) {

synchronized (SingleDemo.class) {

if (s == null)

s = new SingleDemo();

}

}

return s;

}

}

模板设计模式

定义功能时,一部分功能是确定的,而一部分功能确定不了。确定的功能还要预先使用不确定的部分。

这时可将不确定部分对外暴露,由子类去实现。

转载于:https://www.cnblogs.com/liuhongliang1234/p/3430566.html

相关文章:

建立CentOS 6.9 的Yum本地源

1、建立一个本地Yum的软件仓库1mkdir /media/cdrom2、把CentOS6.9光盘装载到/media/cdrom1mount /dev/cdrom /media/cdrom3、安装createrepo1 rpm -ivh /media/cdrom/Packages/createrepo-[按tab键] deltarpm-[按tab键] python-deltarpm-[按tab键] createrepo-0.9.9-26.…

【组队学习】【34期】零基础学python编程思维

零基础学python编程思维 航路开辟者:邓林权领航员:沈一航海士:覃嘉俊、马子阳、左凯文 基本信息 开源内容:https://linklearner.com/datawhale-homepage/index.html#/learn/detail/6内容属性:公测课程内容说明&…

Python wordcloud库使用说明

1. 介绍 wordcloud是优秀的词云展示第三方库 -词云以词语为基本单位,更加直观和艺术地展示文本 通过词云,我们可以快速提取大段文本的重要信息 2. 安装 (cmd命令行) pip install wordcloud 3. 使用 w wordcloud.WordCloud()代表一个文本对应的词云…

resin-pro-4.0.34 服務器在windows环境下的配置

resin-pro-4.0.34 服務器在windows环境下的配置(轉載请注明作者:icelong) 到caucho網站上http://www.caucho.com/download/下載resin-pro-4.0.34 Windows下載zip版,Linux下載tgz版 Install JDK 1.4 or later. On Unix, set the JAVA_HOME variable or link /usr/jav…

【组队学习】【34期】Python(一级)

Python(一级) 航路开辟者:王思齐、马燕鹏领航员:马燕鹏航海士:马燕鹏 基本信息 开源内容:https://github.com/datawhalechina/team-learning-program/tree/master/PythonTest内容属性:公测课…

matlab处理txt文件数据

read_txtfile.,m clear close all clc %load函数一般将用来导入纯数字的文件,可以是文本格式的文件或者是matlab保存的mat格式的文件 positionload(坐标点.txt); %将.txt数据读入到matlab工作空间[m,n]size(position); %获得数据矩阵的大小 j1; sumx0; sumy0; …

Python os库的使用

1. 基本介绍 os提供通用的、基本的操作系统交互功能 os库是Python的标准库,提供几百个处理函数 常用有路径操作、进程管理、环境参数等几类 路径操作:os.path子库,处理文件路径及信息 进程管理:启动系统中其他程序 环境参数&…

(U3D)Time的使用

Time类包含了一个重要的类变量deltaTime,它表示距上一次调用Update或FixedUpdate所用的时间。 因此通过它可以让游戏对象按照一个常速进行旋转,而不是依赖于它的帧频: function Update() { tranform.Rotate(0, 5 * Time.deltaTime, 0); } …

【组队学习】【34期】Scratch(二级)

Scratch(二级) 航路开辟者:王思齐、马燕鹏领航员:马燕鹏航海士:马燕鹏 基本信息 开源内容:https://github.com/datawhalechina/team-learning-program/tree/master/Scratch内容属性:公测课程…

文件操作示例脚本 tcl

linux 下,经常会对用到文件操作,下面是一个用 tcl 写的文件操作示例脚本: 其中 set f01 [open "fix.tcl" w] 命令表示 打开或者新建一个文件“fix.tcl”,并将其 file ID 设置为 f01,后续就以这个 file ID 来…

Python 第三方库自动安装脚本

需求:批量安装第三方库需要人工干预,能否自动安装? 现假设我们要安装以下库 #BatchInstall.py import os libs {"numpy","matplotlib","pillow","sklearn","requests",\ "jie…

ios 如何改变UISegmentedControl文本的字体大小?

UIFont *Boldfont [UIFont boldSystemFontOfSize:16.0f]; NSDictionary *attributes [NSDictionary dictionaryWithObject:Boldfont forKey:UITextAttributeFont]; [segment setTitleTextAttributes:attributes forState:UIControlStateNormal]; 转载于:https://www.cnblog…

CDN全站加速助力企业云上升级

[2018云栖大会南京分会飞天技术汇专场,阿里巴巴高级技术专家魏晋带来题CDN全站加速助力企业云上升级的演讲。主要内容是结合实际客观案例详细解读全战加速产品如何对动静态业务进行的加速,结合安全WAF等其他运营产品,对如何构建适合大部分业务…

【组队学习】一月微信图文索引

一月微信图文索引 一、组队学习相关 周报: 【新周报(049)】Datawhale组队学习Datawhale组队学习周报(第048周)Datawhale组队学习周报(第047周)Datawhale组队学习周报(第046周&…

CSP 2019-09-1 小明种苹果 Python实现+详解

试题 代码 # N,M分别表示树的棵树和疏果轮数 N,M [int(i) for i in input().split()]leftTrees 0#最后所有树树上的苹果总数 reduceMaxIndex 0#疏果个数最多的苹果编号 reduceMaxSum 0#上面那棵树的个数reduceMaxSum 0 reduceMaxIndex 0 leftTrees 0 for i in range(N)…

Easyui 让Window弹出居中与最大化后居中

easyui1.3.2版本,window的弹出不会居中了。而dialog是会居中的,我们必须为为window的open事件做扩展 代码如下:只要加入以下代码即可.如果你是看了MVC项目系列的,把他放到jquery.easyui.plus.js里面就可以了 //让window居中 var easyuiPanelOnOpen func…

电子学会青少年编程等级考试Python一级题目解析11

Python一级题目解析 题目 (1)下列哪个不是Python的保留字?( )【2020.06】 A. ifB. orC. doD. for (2)下面哪一个不是Python的保留字?( )【2021.06】 A. …

单例和多例的区别

为什么80%的码农都做不了架构师?>>> 需要明白以下几个问题: 1. 什么是单例多例;2. 如何产生单例多例;3. 为什么要用单例多例4. 什么时候用单例,什么时候用多例; 1. 什么是单例多例: 单例&#…

CSP 201909-2 小明种苹果(续)Python实现+详解

试题 代码 # N表示苹果树的棵树 N int(input()) T, D, E 0, 0, 0 # 所有树剩果总数 # 发生苹果掉落的苹果树总数 # 相邻三棵树发生苹果掉落的组数 treeMatrix [] # 存放所有数的数果疏果信息 for i in range(N):treeRow list(map(int, input().split()))treeRow treeRow…

hdu1176

hdu1176 f(x,t)max{ f(x-1,t-1) , f(x,t-1) , f(x1,t-1) }; left(5-t)>0?(5-t):0; right(5t)<10?(5t):10; for left to right <-- i resmax{f(maxt,i)}; #include <stdio.h> #include <string.h> #define mmax(x,y,z) (x)>((y)>(z)?(y):(z))?(…

spring体系

2019独角兽企业重金招聘Python工程师标准>>> 一、spring从体系架构上分为 1. 基本组件框架组合&#xff1a;Spring Framework 2.专项领域应用组件&#xff1a;Spring Portfolio 这个Spring Portfolio主要应用满足于特定的的应用场合&#xff1a;包括了spring Securi…

电子学会青少年编程等级考试四级题目解析07

一、题目&#xff1a;数字反转 Jaime想去城堡探险&#xff0c;在城堡门口遇到了小猫&#xff0c;Jaime必须答对小猫提出的问题才能进入城堡。 小猫出题啦&#xff1a;找到一个四位数&#xff0c;该四位数的各位数字翻转&#xff08;个位变千位&#xff0c;十位变百位&#xf…

如何连接本地mysql+设置无密码登录

如果嫌麻烦&#xff0c;可以设置密码为空&#xff0c;下次登录就不需要密码了。

【GDI+】 线段 文字 定位的问题(二)

继续&#xff1a; 经过上文的分析&#xff0c;似乎可以得到类似这样的想法&#xff1a; 由此 分为左右两侧进行区分绘制&#xff0c;应该就可以获得想要的结果了~ 转载于:https://www.cnblogs.com/loveclumsybaby/p/3440314.html

电子学会青少年编程等级考试Python一级题目解析10

Python一级题目解析 1、题目 下面代码的执行结果是&#xff08;&#xff09; a 123456789 b "*" print("{0:{2}>{1},}\n{0:{2}^{1},}\n{0:{2}<{1},}".format(a,20,b))A. *********123,456,789 ****123,456,789***** 123,456,789*********B. **…

ES6基础之Array.fill函数

引子 关注「时事」的同学都会注意到&#xff0c;ES6和TypeScript是时下「投资」的热门。作为一位老同学&#xff0c;我也注意到这一点&#xff0c;不断收集一些小东东&#xff0c;以备不时之需。 正题 本文中记录的是ES6为Array增加的fill()函数。其功能是&#xff0c;用户可以…

CSP 202006-1 线性分类器 python实现+详解

试题 代码 # 读入m,n m, n [int(i) for i in input().split()]# 创建字典存放已知点 dict {} for i in range(m):line input().split()x, y, t linex, y int(x), int(y)dict[(x, y)] t# 逐条线地去判断每一个点 # 创建两个集合&#xff0c;一个存放坐标代入公式后大于零…

Java堆内存分配与回收策略

java主要在堆上分配内存&#xff0c;而Java堆又分为新生代(YoungGen)和老年代(OldGen)两个部分&#xff0c;新生代又再分为Eden区和Survivor区两部分&#xff0c;本文根据java堆的划分&#xff0c;描述hotspot的内存分配策略。 GC垃圾收集分类 Minor GC: 发生在新生代中的垃圾…

清华学长带你从宏观角度看递归

分享嘉宾 赵子一&#xff0c;Datawhale成员&#xff0c;清华大学研究生在读。 分享视频 见公众号“组队学习” 分享内容

关于loader加载的东西必须是继承sprite

如果不是继承sprite转载于:https://www.cnblogs.com/wonderKK/p/3440616.html