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.把对象的属性和方法结合成一个独立的单位, ...
随机推荐
- Java RandomAccessFile用法(转载)
RandomAccessFile RandomAccessFile是用来访问那些保存数据记录的文件的,你就可以用seek( )方法来访问记录,并进行读写了.这些记录的大小不必相同:但是其大小和位置必须 ...
- Java JDBC学习实战(一): JDBC的基本操作
一.JDBC常用接口.类介绍 JDBC提供对独立于数据库统一的API,用以执行SQL命令.API常用的类.接口如下: DriverManager,管理JDBC驱动的服务类,主要通过它获取Connect ...
- C#的选择语句练习(一)
1.请输入一个数x,若x<1,则y=x:若1<=x<10,则y=2x-1:若x>=10,则y=3x-11,要求随意输入一个x值,求出y值. 2.输入问题[你有房子吗?],若回答 ...
- Python--day26--封装和@property
---恢复内容开始--- @property:修饰过的方法不能传任何参数,把方法伪装成属性,没有这个装饰就像c1.area()这样调用,少了一个括号,没什么用. @name.setter:实现可以修改 ...
- joinColumns和inverseJoinColumns的用法
最近在工作中使用springside,里面用到了hibernate的多对多 一开始我在配置department(部门表)和menu(栏目表)的时候,这样写的. Department实体类中的getMe ...
- dotnet 设计规范 · 数组定义
本文告诉大家数组定义需要知道的规范,本文翻译 docs dotnet ✓ 建议在公开的 API 使用集合而不是数组.集合可以提供更多的信息. X 不建议设置数组类型的字段为只读.虽然用户不能修改字段, ...
- JS开发常用工具函数 总结
js原生工具库 1.isStatic:检测数据是不是除了symbol外的原始数据 */ function isStatic(value) { return( typeof value === 'str ...
- 2018-8-10-win10-uwp-绘图--Line-控件使用
title author date CreateTime categories win10 uwp 绘图 Line 控件使用 lindexi 2018-08-10 19:16:51 +0800 201 ...
- H3C IP地址动态获取过程
- navicat for mysql (10038)如何解决
1.授权(youpassword修改为你的密码) #本机登陆mysql: $:mysql -u root -p #改变数据库: mysql>use mysql; #从所有主机: mysql> ...