Java面向对象的特征
面向对象的特征
封装、继承、多态、(有人问第四个特征,再加抽象)
封装
体现形式(2种)
函数---提高代码的复用性
属性的私有化---将属性设置为私有的,通过提供对外的访问方法来间接操作对应属性,可以在方法内对属性做一系列的限定使之符合要求---提高了代码的安全性
private 默认 protected public
1 2.5 3 4
本类 子类 同包类 其他类
权限修饰符
|
本类 |
子类 |
同包类 |
其他类 |
|
|
public |
可以 |
可以 |
可以 |
可以 |
|
protected |
可以 |
可以 |
可以 |
不行 |
|
private |
可以 |
不行 |
不行 |
不行 |
|
默认 |
可以 |
同包子类可以 |
可以 |
不行 |
继承
对一些类中共有的属性和方法进行提取,提取出来一个新的类,通过extends关键字是新的类和原来的来产生联系,这种联系称之为继承。新的类称之为父类(超类、基类),原来的类称之为子类(派生类)
注意:Java中支持的是单继承---一个子类只能有一个父类,而一个父类可以有多个子类
class A {
public int m(){return ;}
}
class B {
public String m(){return “aaa”;}
}
class C extends A, B {}
C c = new C();
c.m();---返回值类型是什么?
优点
1. 提高安全性
2. 提高复用性
3. 统一结构
super关键字
在创建子类对象的时候,会先创建一个父类对象,而这个父类对象在子类中以super关键字的形式存在。super是父类对象的引用,可以认为是父类产生的一个虚拟对象
如果一个构造函数中已经存在了this语句,那么此时不能写super语句,此时如何创建父类对象?---this语句的作用?
子类的每个构造函数中都直接或者间接地有一个super语句---对
如果父类只提供了含参构造,子类的构造函数还能使用默认的super语句吗?---不能
可以通过this来调用父类中的方法或者属性吗?---可以。会先检查当前类中是否有对应属性,如果没有则再检查父类。

重写
在父子类中,存在了方法签名完全一致的方法,称之为函数的重写/覆盖
注意:重写遵守的五个原则:两等两小一大
1. 方法签名一致
2. 当父类中的方法的返回值类型是基本数据类型/void/最终类,子类重写方法的返回值类型必须一致
3. 当父类中的方法的返回值类型是引用数据类型的时候,子类方法的返回值类型要么和父类方法的返回值类型一致,或者子类方法的返回值类型是父类方法的返回值类型的子类
class A{
public Pet m(){}
}
class B extends A {
public Dog m(){};
}
4.子类方法的权限修饰符的范围要大于等于父类方法中权限修饰符的范围
多态
体现形式
编译时多态---重载
运行时多态---向上造型,重写---继承是运行时多态的前提
注意:用向上造型创建对象的时候,用父类声明,用子类创建;父类在声明的时候就相当于给了这个对象一份提纲;子类创建对象的时候是告诉这个对象该怎么干---能不能用看父类,具体执行看子类
重写的理解
1. 方法签名完全一致
2. 子类重写的方法的权限修饰符要大于等于父类
class A{
public void m(){}
}
class B extends A{
protected void m(){}
}
A a = new B();
a.m(); //a对象用A类来声明的,同时告诉a对象身上有一个公共的m方法,可以在任何地方使用;
在使用方法的时候需要看具体子类,这时候,子类中重写的这个方法告诉a不能在其他类中使用---这时候产生了冲突
3. 当父类中的方法的返回值类型是基本数据类型/void/最终类,子类重写方法的返回值类型必须一致
注意:八种基本数据类型之间是相互平等的,不存在继承关系
4. 当父类中的方法的返回值类型是引用数据类型的时候,子类方法的返回值类型要么和父类方法的返回值类型一致,或者子类方法的返回值类型是父类方法的返回值类型的子类
class A {
public void m(){}
}
class B extends A {
public void m(){}
public void mb(){}
}
class C {
public B mc(){return new B();}
}
class D extends C {
public A mc(){return new A();}
}
C c = new D();
c.mc().mb(); //声明c对象用的是C类,告诉了c对象身上有一个mc方法,并且返回值类型是B类,所以调用mc方法的时候可以用一个B类对象来接住结果,可以再次调用B类独显身上的mb方法;
实现用的是D类,具体执行mc方法的时候调用的是D类中的mc方法,D类中mc方法的返回值类型是A类,所以可以定义一个A类对象来接住方法执行后的结果,A身上有mb方法吗?---产生冲突
多态的产生是为了解耦
static
可以修饰变量、方法、代码块、内部类
类变量
static修饰变量,这个变量称之为成员变量或者类变量。静态变量随着类的加载而加载到方法区中的静态区,并且在静态区中被赋予初始值。由于静态变量是先于对象而存在的,可以通过对象来调用,也可以通过类名来调用,一般是通过类名来调用。由于该类创建的所有对象存储的是静态属性在静态区中的地址值,所以静态属性是被所有对象所共享的。---静态属性尽量少用

Java面向对象的特征的更多相关文章
- Java——面向对象的特征三:多态性
2.5面向对象的特征三:多态性 2.5.1 关于java语言中的向上转型和向下转型 ①向上转型(upcasting) : 子--->父(自动类型转换) ②向下转型(downcasting) : ...
- Java——面向对象的特征二:继承性
2.1面向对象的特征二:继承性 ①引入类继承最基本的作用是:代码重用. ②语法 [修饰符列表] class 子类名 extends 父类名{ 类体; } ③子类继承父类以后,父类中声明的属性.方法,子 ...
- Java面向对象的特征一:封装性
1.4 面向对象的特征一:封装性 当创建了类的对象以后,如果直接通过"对象.属性"的方式对相应的对象属性赋值的话,可能会出现不满足实际情况的意外,我们考虑不让对象来直接作用属性,而 ...
- 封装继承多态-java面向对象三大特征
第七章 封装和继承 一.面向对象的三大特征 封装.继承.多态 二.封装 将类的属性(字段)设置为私有的(private),并添加getter/setter方法操作属性. 注意:get|set方法的固 ...
- Java面向对象和特征
面向对象: 概念: 面向对象是一种程序设计思想,计算机程序的设计实质上就是将现实中的一些事物的特征抽离出来描述成一些计算机事件的过程,这种抽象的过程中,我们把具体的事物封装成一个一个的整体进行描述,使 ...
- Java面向对象三大特征
封装: 首先,属性可用来描述同一类事物的特征, 行为可描述一类事物可做的操作,封装就是要把属于同一类事物的共性(包括属性与行为)归到一个类中,以方便使用.比如人这个东东,可用下面的方式封装:人{ 年龄 ...
- Java面向对象的特征与含义
面向对象的主要特征包括抽象.继承.封装和多态. 抽象 把一个类对象的共同特征总结出来,构造新类的过程. 继承 从已有类中得到继承信息,创建新类的过程. 封装 把数据和对数据的操作绑定起来,对数据的访问 ...
- Java 面向对象三大特征之一: 多态
多态与类型转换 子类重写父类方法 1)位置:子类和父类中有同名的方法 2)方法名相同,返回类型和修饰符相同,参数列表相同 方法体不同 多态的优势和应用场合 多态:同一个引用类型,使用不同的 ...
- 简述Java面向对象三大特征:封装、继承、多态
封装: 把对象的全部属性和服务结合在一起,形成不可分割的独立单位: 尽可能隐藏内部细节.(数据隐藏.隐藏具体实现的细节) public.private.protected.default pu ...
随机推荐
- selenium元素定位
在网页自动化测试中,我们要让程序自动模拟我们的点击.输入.悬浮.拖动等操作,完成我们的测试用例组. 输入.点击.打开这样的动词,已经包含在了selenium的方法中,可以直接调用(当然你也可以自己写) ...
- MongoDB可视化界面配置
环境:windows 10 64bit 1. 以管理员身份运行cmd cd E:\MongoDB\Server\3.4\bin 2. 在data文件夹中建立logs目录 3. 在logs目录下建立mo ...
- python 小白(无编程基础,无计算机基础)的开发之路 day1
本节内容 Python介绍 发展史 Python 2 or 3? 安装 Hello World程序 变量 用户输入 模块初识 .pyc是个什么鬼? 数据类型初识 数据运算 表达式if ...else语 ...
- C#实现设置完整虚拟路径
){ mHttpUrl.Append(":"); mHttpUrl.Append(port);}string mServerName = "~/AppModu ...
- springmvc之单元测试(MockMvc)-独立测试
spring mvc测试框架提供了两种方式,独立安装和集成Web环境测试(此种方式并不会集成真正的web环境,而是通过相应的Mock API进行模拟测试,无须启动服务器) 1.mockMvc.perf ...
- 秒表计时器以及Stopwatch
Stopwatch:秒表计时器,用来记录程序的运行时间,通常用来测试代码在时间上的执行效率.(需要引用:System.Diagnostics.) Stopwatch sw=new Stopwatch( ...
- SQL---约束---add constraint方法添加约束
1.主键约束: 格式为:alter table 表格名称 add constraint 约束名称 增加的约束类型 (列名) 例子:alter table emp add constraint ppp ...
- java并发包下的并发工具类
1.Exchanger 功能:用于线程间数据的交换 应用场景:1)遗传算法,目前还不是特别理解 2)校对工作,假设A,B线程做同一件任务,可以通过数据校验判断两线程是否正确的工作 例子:是一个简单的 ...
- 分布式监控系统Zabbix3.2给异常添加邮件报警
在前一篇 分布式监控系统Zabbix3.2跳坑指南 中已安装好服务端和客户端,此处客户端是被监控的服务器,可能有上百台服务器.监控的目的一个是可以查看历史状态,可以对比零晨和工作区间数据的对比,以便后 ...
- cinder块存储控制节点
#cinder块存储控制节点 openstack pike 安装 目录汇总 http://www.cnblogs.com/elvi/p/7613861.html #cinder块存储控制节点 #在控制 ...