JAVA封装、继承、多态
封装
1、概念:
将类的某些信息隐藏在类的内部,不允许外部程序访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。
2、好处:
a.只能通过规定的方法访问数据
b.隐藏类的实例细节,方便修改和实现
3、封装的实现步骤
①修改属性的可见性——设为private
②创建getter/setter方法,用于属性的读写
③在getter/setter方法中加入属性控制语句,对属性值的合法性进行判断
继承
继承是类与类的一种关系,例如:动物和狗的关系,动物是父类(或基类),狗是子类(或派生类)。
要注意的是,在Java中的继承是单继承,也就是说一个儿子只能有一个爸爸
继承的好处:
子类拥有父类的所有属性和方法(private除外)
子类对父类代码的复用
继承的语法规则:
class 子类 extends 父类 #如: class Dog extends Animal{ ...... }
方法的重写:
1、什么是方法的重写:
如果子类对继承父类的方法不满意,是可以重从写父类继承的方法,当调用时会优先调用子类的方法。
2、语法规则:
返回值类型、方法名、参数类型及个数 都要与从父类继承的方法相同,才叫方法的重写。
继承的初始化顺序:
若创建一个子类对象,系统会先创建父类的属性进行初始化,再调用父类的构造方法,然后再创建子类的属性进行初始化,最后调用子类的构造方法。
多态
多态指对象的多种引用形态,继承是多态的前提
1、引用多态
父类的引用可以指向本类对象 Animal object1=new Animal();
父类的引用可以指向子类对象 Animal object2=new Dog();
注意:子类的引用不可以指向父类对象Dog object3=new Animal();
2、方法多态
创建本类对象时,调用的方法为本类的方法;
创建子类对象时,调用的为方法为子类重写的方法或者继承的方法
注意:本类对象不能调用子类的方法
引用类型转换:
Dog dog=new Dog();
Animal animal=dog(); //向上类型转换:(不存在风险)
Dog dog2=(Dog)animal; //向下类型转换:(存在风险,可能出现数据溢出)
if(animal instenceof Cat){ //用instanceof运算符,来解决引用对象的类型,避免类型转换的安全问题,返回布尔值,来判断animal能否转换为Cat类型
Cat cat=(Cat)animal;
} 抽象类:
规定子类必须实现某些方法,但不关注实现细节
a.abstract定义抽象类
b.abstract定义抽象方法,只有声明,不需要实现,如:public abstract void demo(); //直接使用分号结尾即可,不能有{ }
c.包含抽象方法的类一定是抽象类(abstract)
d.抽象类中可以包含普通的方法,也可以没有抽象方法
e.抽象类不能直接创建对象,可以定义引用变量
f.抽象类的子类必须实现父类中的所有抽象方法 接口:intreface
接口可以理解为一种特殊的类,由全局常量和公共的抽象方法组成
接口定义了类所需要遵守的规范,接口中的方法类中都必须提供
接口可以有多个父接口
接口一般是需要被继承和实现的,所以通常用public修饰,不能用protect和private
语法:
[修饰符] interface 接口名 [extends 父接口1,父接口2,父接口3....] { //如果接口或者接口内的方法不手动添加 abstract ,系统也会默认为abstract
零到多个常量定义...
零到多个抽象方法的定义...
} 通过类使用接口:implements
[修饰符号] class 类名 extends 父类 implements 接口1,接口2...{
...
} 实现接口的多种方法:
1、IAnimal demo = new Cat(); demo.eat();
2、Cat demo = new Cat(); demo.eat();
3、(用匿名内部类的方式1)
IAnimal demo = new IAnimal(){
public void eat(){
System.out.println("eat");
}
};
4、(用匿名内部类的方式2)
new IAnimal(){
public void eat(){
System.out.println("eat");
}
}.eat();
JAVA封装、继承、多态的更多相关文章
- Java 封装 继承 多态
Java 继承 继承的概念 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类. 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法 ...
- java面向对象(封装-继承-多态)
框架图 理解面向对象 面向对象是相对面向过程而言 面向对象和面向过程都是一种思想 面向过程强调的是功能行为 面向对象将功能封装进对象,强调具备了功能的对象. 面向对象是基于面向过程的. 面向对象的特点 ...
- Java三大特性(封装,继承,多态)
Java中有三大特性,分别是封装继承多态,其理念十分抽象,并且是层层深入式的. 一.封装 概念:封装,即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别:将抽象得到的数据 ...
- Java基础——面向对象(封装——继承——多态 )
对象 对象: 是类的实例(实现世界中 真 实存在的一切事物 可以称为对象) 类: 类是对象的抽象描述 步骤: 1.定义一个类 (用于 描述人:) ( * 人:有特征和行为) 2.根据类 创建对象 -- ...
- 浅谈学习C++时用到的【封装继承多态】三个概念
封装继承多态这三个概念不是C++特有的,而是所有OOP具有的特性. 由于C++语言支持这三个特性,所以学习C++时不可避免的要理解这些概念. 而在大部分C++教材中这些概念是作为铺垫,接下来就花大部分 ...
- php面向对象 封装继承多态 接口、重载、抽象类、最终类总结
1.面向对象 封装继承多态 接口.重载.抽象类.最终类 面向对象 封装继承多态 首先,在解释面向对象之前先解释下什么是面向对象? [面向对象]1.什么是类? 具有相同属性(特征)和方法(行为)的一 ...
- Java开发知识之Java的继承多态跟接口*
Java开发知识之Java的继承多态跟接口 一丶继承 1.继承的写法 在Java中继承的 关键字是 extends 代表一个类继承另一个类. 继承的含义以及作用: 继承就是基于某个父类的扩展.制定出来 ...
- Python 入门 之 面向对象的三大特性(封装 / 继承 / 多态)
Python 入门 之 面向对象的三大特性(封装 / 继承 / 多态) 1.面向对象的三大特性: (1)继承 继承是一种创建新类的方式,在Python中,新建的类可以继承一个或多个父类,父类又可以 ...
- OOP三大核心封装继承多态
OOP支柱 3 个核心:封装 继承 多态 封装就是将实现细节隐藏起来,也起到了数据保护的作用. 继承就是基于已有类来创建新类可以继承基类的核心功能. 在继承中 另外一种代码重用是:包含/委托,这种重用 ...
- python面向对象(封装,继承,多态)
python面向对象(封装,继承,多态) 学习完本篇,你将会深入掌握 如何封装一个优雅的借口 python是如何实现继承 python的多态 封装 含义: 1.把对象的属性和方法结合成一个独立的单位, ...
随机推荐
- 小程序与HTML5的区别
小程序与传统HTML5还是有明显的区别,主要区别在于: 开发工具不同: 区别于H5的开发工具+浏览器Device Mode预览的模式,小程序的开发基于自己的开发者工具,可以实现同步本地文件+开发调试+ ...
- layer/layui弹出层插件bug
<button class="layui-btn" lay-submit lay-filter="formDemo" id="layui-btn ...
- Mysql怎样控制replace替换的次数?
我想把“ABC是ABC”替换成“123是ABC”,也就是找出第一个ABC替换成123,MYSQL命令应该怎么写? UPDATE data SET body=REPLACE(body, 'ABC', ' ...
- vue脚手架搭项目 git push超时github网站打不开
vue: 1.npm install vue-cli -g 全局安装脚手架 2.vue init webpack name 新建项目 name为项目名称 react: 1..npm install ...
- JS(JavaScript)的进一步了解8(更新中···)
元素节点的树状图 document>documentElement>body>tagName offsetLeft/offsetTop 结合运动 滚动轮播 1.DOM 全称:docu ...
- java.util.Date和jdk1.8新时间API比拼
旧的时间和日期的API的缺陷 Java 的 java.util.Date 和 java.util.Calendar 类易用性差,不支持时区,而且都不是线程安全的. Date如果不格式化,打印出的日期可 ...
- 手把手教你用ngrx管理Angular状态
本文将与你一起探讨如何用不可变数据储存的方式进行Angular应用的状态管理 :ngrx/store——Angular的响应式Redux.本文将会完成一个小型简单的Angular应用,最终代码可以在这 ...
- codeforces 540E 离散化技巧+线段树/树状数组求逆序对
传送门:https://codeforces.com/contest/540/problem/E 题意: 有一段无限长的序列,有n次交换,每次将u位置的元素和v位置的元素交换,问n次交换后这个序列的逆 ...
- schema list validator --python cerberus
工作中需要对如下json结构进行验证: "ActiveStatus" : [ { "effectiveDates" : { "effectiveFro ...
- 开发板免费领!腾讯云IoT应用创新大赛正式启动!
大赛简介 腾讯云IoT应用创新大赛是腾讯云面向物联网领域举办的大型竞赛,通过腾讯云IoT全链路产品能力,开放平台和服务,与广大开发者共同创新,孵化优秀的IoT产品和解决方案,共同构建IoT应用生态. ...