java中面向对象_java中的面向对象
首先需要了解什么时面向对象呢?
面向:
基本义:面对,朝向
引申义:注重, 关注
对象:
世间一切的事物(万物皆对象)
面向对象思想:
面向对象思想就是把一个关注点放在一件事或一个活动中涉及到的人或事物(也就是对象)上的思想(或思维方式)。面向对象关键字:事物,对象
栗子:
比如有一堆袜子,而现在你只需要找你的女朋友这个对象来帮你洗这个袜子,至于她是用手洗,还是洗衣机洗,这个就不需要你来操心了,只需要找她来帮你
洗就行了,当然也可以找干洗店帮你洗,面向对象思想主要就是让非常复杂的事情变得简单了,只需要找对象来做就可以了
面向过程思想:
面向过程思想就是把关注点放在一件事或一个活动中涉及到的步骤(也就是过程)上的思想(或思维方式)。面向过程关键字:步骤,过程
栗子:
比如说有一堆袜子需要洗,首先时需要一盆水,然后需要把袜子放在水盆里,然后放入洗衣液,然后开始清洗,洗完以后还需要晒干。如果其中有一个步骤
没有执行,那么洗袜子这件事就不会完成
面向对象思想特点
是一种跟符合人们思考习惯的思想
把复杂的事情简单化
把人们从执行着变成了指挥者
面向对象的程序开发
就是不断的找对象、使用对象、指挥对象做事的过程,没有对象?创建一个!
面向对象思想特征
封装(encapsulation)
继承(inheritance)
多态(polymorphism)
封装
什么是封装?
引申义:把一系列功能打包到一台设备里,提供使用这些功能的界面,常见的封装体:汽车,电脑,洗衣机。。。
封装的概念
将一系列相关事物共同的属性和行为提取出来,放到一个类中,隐藏对象的属性和实现细节,仅对外提供公共的访问方式
封装的关键
绝对不能让类中的方法直接访问其他类的数据(属性),程序仅通过对象的方式对对象的数据进行交互
封装的好处
提高安全性
提高服用性
将复杂的事情简单化
java中的封装体
方法
安全性:调用者不知道方法的具体实现
复用性:方法可以被重复使用
简单化:将繁多的代码以一个方法的方式呈现,近通过调用方法就可以实现功能;代码维护也变得简单
类
安全性:调用者不知道类的具体实现
复用性:类的对象可以被重复使用
简单化:类的对象包含了更多的功能,使用起来也更方便
继承
概念:泛指把前人的作风,文化,知识,财产等接收过来
java中的继承
让类与类之间产生父子关系
被继承的类叫做父类(基类、超类)
继承的类叫做子类(派生类)
格式(extends)
class父类{
//....
}
class子类 extends 父类{
//....
}
注意:在java中,子类只能继承父类的非私有成员(成员变量,成员方法)
继承的特点
单继承
java只支持类的单继承,但是支持多层(重)继承
java支持接口的多继承,语法为:
接口A extends 接口B,接口C.
私有成员不能继承
只能继承父类的非私有成员(成愿变量,成愿方法)
构造方法不能继承
构造方法用于初始化本类对象。
创建子类对象时,需要调用父类构造初始化该对象的父类内容,若父类构造可以被继承,该操作会造成调用的混乱(构造方法只能本类调用)
继承体现了“is a”的关系
子类符合“is a(是一个)”父类的情况下,才使用继承,其他情况下不建议使用
继承的使用场景
多个类中存在相同的属性和行为时,可以将这些内容提取出来放到一个新类中,让这些类和新类产生父子关系,实现代码的复用性
继承的优缺点
优点:
功能复用
直接将已有的属性和行为继承过来,实现了功能的复用,节省了大量的工作
便于扩展新功能
在已有的功能的基础上,更容易建立,扩充新功能
结构清晰,简化认识
同属于一个继承体系的相关类,他们之间结构层次清晰,简化了人们对代码结构的认识
易维护性
不同类之间的继承关系,让这些事物之间保持一定成都的一致性,大大降低了维护成本
缺点
打破了封装性
父类向子类暴露了实现细节,打破了对象的封装性
高耦合性
类与类之间紧密的结合在一起,相互依赖性高
方法重写(Override)
定义:子类中出现和父类方法定义相同的方法的现象
解释:方法重写也叫方法的复写、覆盖方法名、参数列表、返回值类型都相同
注意事项:父类私有方法无法重写
子类方法访问权限不能小于父类方法(private
子类不能比福哦欸方法抛出更大的异常
使用场景:扩展父类功能
父类功能过时,重新实现父类功能
java中的访问权限修饰符
总结:
private:强调的是给自己来使用
默认:强调的是给同包下的类来使用
protected:强调的是给子类使用
public:强调的是给大家使用
方法重写和方法重载的区别
重载(Overload):
方法名:相同
参数列表:不同(个数或对应位置类型)
返回值类型:无关
修饰符:无关
定义位置:同一个类中(同一个类中出现两个或两个以上命名一致,并且参数列表不同时)
重写(Override):子类与父类方法命名一致
方法名:相同
参数类型:相同
返回值类型:相同
修饰符:访问权限不小与被重写方法
定义位置:子父类中(子类中出现和父类一样的方法时)
方法的调用
在方法中调用成员方法是编译看左(首先要看左边的类型有没有这个成员(即父类有没有,如果没有,则会报错),运行看右(运行时
具体用的时右边类中的成员(即使用的是通过子类重写以后的方法)
多态
什么是多态?
多种状态,同一对象在不同情况下表现出不同的状态或行为
结论:多态关系中,成员变量不涉及到重写
简单记忆:多态关系中,使用成员变量,遵循“编译看左,运行看左”
编译看左:意思是在编译期间会看左边的类型有没有这个成员,没有就报错。
编译看左:意思是在运行期间使用的是左边类型的这个成员
多态关系中成员变量的内存图
java中实现多态的步骤
要有继承(或实现(类和接口))关系
要有方法重写
父类引用指向子类对象(is a关系)
多态的使用场景
父类型可以作为形参的数据类型,这样可以接收其任意的子类对象
多态的好处
可维护性:基于继承关系,只需要维护父类代码,提高了代码的复用性。大大降低了程序的工作量、
可扩展性:把不同的子类对象都当作父类看待,屏蔽了不同子类对象间的差异,做出通用的代码,以适应不同的需求,实现了向后兼容
多态的弊端
不能使用子类特有成员,如果一定要使用,可以使用类型转换
类型转换
当需要使用子类特有功能时,需要进行类型转换
向上转型(自动类型转换)
子类型转换成父类型
栗子:Animal animal = new Dog();
向下转型(强制类型转换)
父类型转换成子类型
栗子:Dog dog = (Dog)animal;
注意事项
只能在继承层次内进行转换(否则会报错(ClassCastException))
将父类对象转换成子类之前,使用instanceof进行检查
instanceof关键字的用法:
对象名 instanceof 数据类型
意思时判断前边对象是否时后边的数据类型
栗子:
dog类
//定义一个狗类,并继承动物类
public classDog extends Animal{
@Overridepublic voideat(){
System.out.println("啃骨头");
}public voidwatch(){ //狗的特有方法
System.out.println("狗会看家");
}
}
父类
//定义一个动物类
public classAnimal {public voideat(){
System.out.println("睡觉");
}
}
测试类
public classa {public static voidmain(String[] args) {//测试类
Animal an= new Dog(); //使用多态指向子类
an.eat(); //调用子类的方法//调用子类特有的watch方法//an.watch(); 子类的特有方法不能直接调用,否则会报错//正确的写法
Dog dog = (Dog)an; //向下转型
if(an instanceof Dog){ //判断当前类是否是Dog对象
dog.watch();
}
}
}
java中面向对象_java中的面向对象相关推荐
- java面向对象_JAVA中面向对象
一.方法: 1.方法概述: 在JAVA中,方法就是用来完成解决某件事情或实现某个功能的办法. 2.方法的语法格式: 修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2,.....){ ...
- java 继承 意义_Java中继承,类的高级概念的知识点
1.继承含义 在面向对象编程中,可以通过扩展一个已有的类,并继承该类的属性和行为,来创建一个新的类,这种方式称为继承(inheritance). 2.继承的优点 A.代码的可重用性 B.子类可以扩展父 ...
- java访问控制符_java中访问控制符的作用
展开全部 java中访问控制符的作用是说明被声明的内容(类.属性.方法和构造方法)的访问权636f70793231313335323631343130323136353331333337393466限 ...
- java set 空值_Java中如何更优雅的处理空值
经常看到项目中存在到处空值判断的情况,这些判断,会让人觉得摸不着头绪,它的出现很有可能和当前的业务逻辑并没有关系.但它会让你很头疼.有时候,更可怕的是系统因为这些空值的情况,会抛出空指针异常,导致业务 ...
- java list对象_JAVA中list
Java 查找 List 中的最大值.最小值 Java 查找 List 中的最大值.最小值 java> List list = new ArrayList(); java.util.List l ...
- java mod %区别_Java中 % 与Math.floorMod() 区别详解
%为取余(rem),Math.floorMod()为取模(mod) 取余取模有什么区别呢? 对于整型数a,b来说,取模运算或者取余运算的方法都是: 1.求 整数商: c = a/b; 2.计算模或者余 ...
- java synchronized 使用_Java中Synchronized的用法
synchronized是Java中的关键字,是一种同步锁.它修饰的对象有以下几种: 1. 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码 ...
- java synchronized静态_Java中Synchronized的用法(简单介绍)
简单介绍 synchronized是Java中的关键字,是一种同步锁.它修饰的对象有以下几种: 1. 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调 ...
- java show过时_Java中show() 方法被那个方法代替了? java编程 显示类中信
你说的show是swing里的吧,在老版本中Component这个超类确实有show这个方法,而且这个方法也相当有用,使一个窗口可见,并放到最前面.在jdk5.0中阻止了这个方法,普遍用setVisi ...
最新文章
- 干货 | 如何入手卷积神经网络
- JAVA线程池ThreadPoolExecutor与阻塞队列BlockingQueue .
- Java字符串String比较不要用==原因
- ML之模型文件:机器学习、深度学习中常见的模型文件(.h5、.keras)简介、h5模型文件下载集锦、使用方法之详细攻略
- apache配置 index.php,修改apache配置文件去除thinkphp url中的index.php
- [Linux C]列出指定目录下的所有文件(夹)
- 开源Registry项目Harbor源代码结构解析
- 42 github 开源代码 ——README.md语法/相关操作等
- 走不远的共享滑板车!
- ROC和DO的双重设计:打造出支付领域的重磅产品
- echarts使用e_macarons方法
- 【转贴】如何读好Phd博士
- 【设计模式05】单例模式
- 哥德巴赫猜想:任意大于6的偶数都可以被分解成两个素数之和
- oracle rrsf_Oracle实战笔记(第三天)
- Ubuntu 命令行安装chrome
- vb.net程序可以在触摸屏上运行么_触摸屏amp;触控一体机常见故障解决方法
- 前端转安卓开发!妈妈再也不用担心我的面试,满满干货指导
- JAVA复健篇01_基本概念
- 如何使用WinAuth算出US开头的暴雪战网安全令序列号