新年在家学java之基础篇-高级类的特性
- 继承 extends
- 子类的共性代码都是继承自父类的,每个子类只要写自己特有的代码
- class 子类 extends 父类
- 继承提高了代码的复用性,提供了多态的前提,但是不要为了某个功能去继承
- 子类不是父类的子集,而是对父类的扩展
- 规则:子类不能直接访问父类中private的成员变量和方法
- 只支持单继承,不能多重继承,可以多层继承。子类只能有一个父类
- 方法的重写override
- 子类重写父类的方法,只是重新编写方法体代码,如果父类的方法是public ,子类重写时就不能使用缺省以下的修饰符
- alt+/ 就能找到重载的方法
- 方法的重载是一个类可以有多个同名的方法 ,而方法的重写时子类可以重新写父类的方法,覆盖父类的方法
- super
- 用于访问父类中定义的属性,调用父类中定义的成员方法,在子类构造方法中调用父类的构造器
- 使用super,子类可以调用所有的父类层级
- 子类所有的构造器默认都会访问父类中空参数的构造器
- 当父类没有空参数的构造器时,子类构造器必须通过super或者this指定调用本类或者父类构造器,且放在首行
- 在父类只有有参构造可以使用时,子类必须显示构造一个构造器来掉父类的有参构造
- 多态
- 两种体现 重载和重写
- 对象的多态--可以直接应用在抽象类和接口上
- 父类类型的引用可以指向子类的对象--向上转型
- object
- object类是java类的根父类-基类
- 未使用extends未指明父类,就是继承object类
- 设置形参可以使用 object obj,可以确定传过来的是一个类,但是不确定是什么类
- p.toString() 返回反映这个对象的字符串
- 对象类型转换casting
- 自动转换类型:小的数据类型转换成大的数据类型
- 强制类型转换:把大的数据类型强制转换成小的数据类型
- 如 int i=(int)1200L;
- 父类可以自动转换成子类类型,但是子类得强制转换为父类
- ==和equals
- ==是基本类型比较值,值相等就为true,如果是比较对象,必须指向同一个对象才为true。且两遍的数据类型必须兼容否则出错
- equals 只能比较引用类型,看是否指向同一个对象
- equals在对于file,string,date和包装类时,只比较类型和内容,而不考虑是否是同一个对象
- 用字面量创建对象时,只在常量池创建一个对象;而用new时,常量池有对象,堆中也有对象,字面量比new省内存
- 包装类--需要后续完善 #完善
- 针对八种基本类型的引用类型-包装类
- jdk1.5以后支持自动拆箱装箱
- 主要是为了基本数据类型与字符串直接的转化
- 基本数据类型转字符串
- int i=Integer.parseInt("123"); 数据类型转转字符串
- static 静态
- 实例变量,只有实例化之后才能使用,属于实例化对象的一部分,不能共用
- 类变量不用实例化,直接类名.属性名就可以使用,是类的一部分,被所有这个类的实例化对象所共享,也叫静态变量
- if(s !=null && !s.equals(""); --判断S不是空字符串
- 在开发中多次使用的方法,把他抽象成一个工具类的方法
- 静态方法,类加载以后就能使用,并且优于对象存在,不需要new,在static方法中不能使用this
- 单例设计模式
- 设计模式就是在我们实际编程过程中,逐渐总结出的一些解决问题的讨论套路
- 单例模式就是只有一个实例(实例对象)
- 构造器中有大量的代码,且new一次对象耗时很长占用很多资源,比较实用单例模式
- 饿汉式的单例
- 是在类加载之后,还没有人调用时就先new好一个对象,以后不论谁调用getInstance方法时都直接放回这个new对象
- 构造私有化,调用这个类的人就不能直接使用new来创建对象 private 类名(){}
- private static 类名 a =new 类名(); 私有的类变量
- public static 类名 getInstance (){
- return a;}
- 使用时只能 类名 a= 类名.getInstance(); 都使用一个对象
- 懒汉式单例
- 最开始对象时null,只有第一个调用才new一个对象,之后所有调用我的都用这个对象
- 构造私有化,调用这个类的人就不能直接使用new来创建对象 private 类名(){}
- private static 类名 a =null;
- public static 类名 getInstance (){
- if (a ==nll) a =new 类名();
- return a;}
- 懒汉式和饿汉式的区别就是什么时候new对象。懒汉式存在线程安全,在多线程时可修复
- 初始化块
- 在程序的运行过程中,非静态代码块每次new对象都有重新执行,而静态代码块只执行一次
- 匿名内部类?#完善
- final
- final的类不能被继承,且不能被子类重写,final标记的变量也被称为常量,名称约定大写。
- final修饰的变量必须显示赋值,且不能再改变。final static 一起修饰变量就是全局常量
- 抽象类 abstract class
- 用abstract 修饰类时,这个类叫做抽象类,修饰方法时,这个方法叫做抽象方法(抽象方法只有方法的声明,没有方法的实现,以分号结束 :abstract int abstractMEthod(int a);
- 含有抽象方法的类必须被声明为抽象类
- 抽象类不能被实例化,被继承时子类必须重写父类的抽象方法,并提供方法体,若没有重写全部的抽象方法,子类仍为抽象类
- final 和抽象类是冲突的。final是最终,它修饰的类是最终类不能被继承,而抽象类如果想要被使用,就必须继承抽象类,实现哪些抽象的方法
- 抽象类可以有构造方法啊,但是不能直接创建抽象类的实例对象
- 模板方法设计模式
- 抽象类作为多个子类的通用模板,子类在抽象类基础上进行扩展改造。
- 接口 interface
- java不支持多重继承,有了接口就能实现多重继承,implements
- class 类名 implements 接口{} 一个类可以实现多个接口(implements A接口,B接口),接口也可以继承其他接口
- 接口中所有成员变量都默认是由public static final(全局常量)修饰,方法都是默认由public abstract修饰,且没有构造器
- 如果类没有实现接口的所有方法,这个类就要定义为抽象类
- 如果类既有继承又有实现,就要先写extends,后写implements
- 如果父类老是在改,基于这个父类的子类等都会受到影响,在需要给父类增加方法时,就不能直接在父类上修改,只能新建接口,在接口上扩展,需要的子类自行实现接口 --为啥不用抽象而要用接口
- 抽象类是对一类事物的高度抽象,既有属性又有方法,而接口是对方法的抽象,也就是对一系列对象进行抽象。对一类事物进行抽象应当使用抽象类,而对一系列动作抽象就要使用接口,对使用这些动作的类使用抽象动作就可以了。
- 工厂方法 FactoryMethod
- 通过工厂把new对象给隔离了,通过产品的接口可以接受不同实际产品的实现类,实例类名的改变不影响其他代码
- BWM b3=new BWM3Factory().productBWM(); #不懂
- 内部类
- 外部的类想要用自己内部类的方法,得先new内部类的对象 new 类名().方法名()
- 如果内部类是static,就不能使用外部类的非static得成员
- 内部类主要是为了解决java不能多重继承的问题
新年在家学java之基础篇-高级类的特性的更多相关文章
- 新年在家学java之基础篇--循环&数组
因为“野味肺炎”的肆虐,过年被迫宅家只能吃了睡.睡了吃.这么下次只能长膘脑子空空,不如趁此机会重新学习java基础,为日后做铺垫~ 循环结构: 几种循环:for(::),while(){},do{}w ...
- 新年在家学java之基础篇-参数&修饰符&构造器
可变参数 不知道可能给方法传递多少个参数时使用这个方法 public void printInfo (String[] args) --可以定义一个数组,在调用这个方法适合赋值给一个数组 public ...
- 新年在家学java之基础篇--类&方法
面向对象 面向对象OOP,面向过程POP 面向对象三大特征 封装 继承 多态 类 类由属性(对应类中的成员变量)和行为(成员方法)来构成 类的成员变量可以先声明,不用初始化,有默认值 方法名称如果多个 ...
- 小白学Docker之基础篇
系列文章: 小白学Docker之基础篇 小白学Docker之Compose 小白学Docker之Swarm PS: 以下是个人作为新手小白学习docker的笔记总结 1. docker是什么 百科上的 ...
- 你所不知道的库存超限做法 服务器一般达到多少qps比较好[转] JAVA格物致知基础篇:你所不知道的返回码 深入了解EntityFramework Core 2.1延迟加载(Lazy Loading) EntityFramework 6.x和EntityFramework Core关系映射中导航属性必须是public? 藏在正则表达式里的陷阱 两道面试题,带你解析Java类加载机制
你所不知道的库存超限做法 在互联网企业中,限购的做法,多种多样,有的别出心裁,有的因循守旧,但是种种做法皆想达到的目的,无外乎几种,商品卖的完,系统抗的住,库存不超限.虽然短短数语,却有着说不完,道不 ...
- java 线程基础篇,看这一篇就够了。
前言: Java三大基础框架:集合,线程,io基本是开发必用,面试必问的核心内容,今天我们讲讲线程. 想要把线程理解透彻,这需要具备很多方面的知识和经验,本篇主要是关于线程基础包括线程状态和常用方法. ...
- java面试基础篇(三)
1.Q:ArrayList 和 LinkedList 有什么区别? A:ArrayList查询快!LinkedList增删快.ArrayList是基于索引的数据接口,它的底层是数组.空间占用相对小一些 ...
- JDBC-使用Java连接数据库-基础篇
这是小主第一次写Java连接数据库博客,初学Java之时,Java连接数据库是我最头疼的,不过经过一个月的学习,也差不多略有收获,所以给大家分享一下. Java连接数据库大约需要五大步骤: 创建数据库 ...
- Java经典基础与高级面试36题和答案
1.”static”关键字是什么意思?Java中是否可以覆盖(override)一个private或者是static的方法? “static”关键字表明一个成员变量或者是成员方法可以在没有所属的类的实 ...
随机推荐
- js模式-观察者模式
// 主题,接收状态变化,触发每个观察者 class Subject { constructor() { this.state = 0 this.observers = [] } getState() ...
- mybaits的注解方式与配置文件方式比较
注解方式比配置文件方式简单了更多. 俩种配置 一个是制定配置文件路径,一个直接class指向dao层接口 只需加一个注解@**** 就能够实现 比写一个xml的配置文件简单更多.
- 《百面机器学习算法工程师带你去面试》高清PDF及epub+《美团机器学习实践》PDF及思维导图
http://blog.sina.com.cn/s/blog_ecd882db0102yuek.html <百面机器学习算法工程师带你去面试>高清PDF及epub+<美团机器学习实践 ...
- tableau创建定量值地图
一.官方案例:定量值地图的创建 数据形式: 过程: 分别双击经纬度(默认的纬度会自动添加到行功能区,经度到列功能区) 将Id放入标记卡详细信息 将Magnitude^10(震级^10)放入大小,(该 ...
- Sqlserver 增删改查----增
注意我说的常见查询,可不是简单到一个表得增删改查,做过实际开发得人都知道,在实际开发中,真正牵扯到一个表得增删改查只能说占很小得一部分,大多都是好几个表的关联操作的. 下面我就说一下我在实际开发中经常 ...
- 组件state
一.设计合适的state 1.1 定义: state代表一个组件UI呈现的完整状态 stae代表一个组件UI呈现的最小状态集[所有状态都用于组件UI的变化,没有任何多余的状态] 1.2 state和p ...
- 应用架构的演进--MVC,RPC,SOA,微服务架构
MVC架构:垂直应用架构 当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率. 当业务规模很小时,将所有功能都部署在同一个进程中,通过双机或者前置负载均衡 ...
- 一本通1402 Vigenère密码
[题目描述]6世纪法国外交家Blaise de Vigenère设计了一种多表密码加密算法——Vigenère密码.Vigenère密码的加密解密算法简单易用,且破译难度比较高,曾在美国南北战争中为南 ...
- findbugs报OBL_UNSATISFIED_OBLIGATION_EXCEPTION_EDGE的修改实例
先看出问题的一段代码 public void encode(String xxxPath, String thumbTmpPath, String imageType) { LOGGER.info(& ...
- windows 10 远程连接出现CredSSP加密Oracle修正错误
以下方法只受用于windows专业版或者企业版 . 解决方法: 运行 gpedit.msc 本地组策略: 计算机配置>管理模板>系统>凭据分配>加密Oracle修正 选择启用并 ...