第三章 面向对象(概述)
标签: # java SE java 编程语言 多态 封装 类
3.1 面向对象特点
特点
**封装:**将类中不需要对外开放的接口隐藏起来。
**继承:**子类可继承父类的公有成员变量和成员函数。
**多态:**同一个行为具有多个不同表现形式或形态的能力。
对象:对象是一个类的具体实例
语法
/**
描述手机
静态属性:颜色,品牌,尺寸。。。
动态属性:打电话
*/
class Phone{
String color;//颜色
String brand;//品牌
double size;//尺寸
void call(){
System.out.println("打电话");
}
}
class PhoneDemo{
public static void main(String[] args){
Phone p = new Phone();//创建了一个电话对象
p.color = "黑色";
p.brand = "华为";
p.size = 5.5;
System.out.println(p.color);
System.out.println(p.brand);
System.out.println(p.size);
p.call();//调用类中成员函数时 语法:对象名 . 函数变量名
}
}
3.2 类内存图

3.3 成员变量与局部变量
成员变量与局部变量的区别
| 成员变量 | 局部变量 | |
|---|---|---|
| 位置 | 类中,方法(函数)外 | 方法(函数)中或者方法声明上(形参) |
| 生命周期 | 与对象共存亡 | 与方法(函数)共存亡 |
| 初始值 | 有默认值String =null,double= 0.0int= 0 | 没有默认值 须先定义,赋值,后使用 |
class Var{
int x;//成员变量
public void show(){
int y = 5;//局部变量
System.out.prinlnt(x);
System.out.prinlnt(y);
}
}
class VarDemo{
public static void main(String[] args){
Var v = new Var();
v.show();
}
}
3.4 封装
封装:是指隐藏对象的属性和细节,仅对外提供公共访问方式
封装的优点
- 将变化隔离
- 便于使用
- 提高重用性
- 提高安全性
封装的原则
- 降不需要对外提供的内容都隐藏起来
- 把属性都隐藏,提供公共方法对其访问
3.5 继承
继承基本概念:
含义
当多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为只要继承这个类即可(将多个类之间的共性进行抽取,抽取出一个单独类,出处类再继承抽取出的类,提高代码复用性)
父类含义
多个类成为子类,单独的这个类称为父类(超类或者基类)
语法格式
Class A extends B{}
作用
提高代码复用性。 让类与类之间产生了关系,为多态提供了前提。
与C++不同
Java只支持单继承不支持多继承,支持多层继承

继承中成员变量特点
class Fu{
int age = 45;
void talk(){
System.out.println("爸爸会讲中文......");
}
}
class Zi extends Fu{
int age = 18;
void show(){
System.out.println(super.age);
}
void talk(){
System.out.println("儿子会讲中文......");
}
}
class ExtendsDemo1{
public static void main(String[] args){
Zi zi = new Zi();
zi.talk();
}
}
继承中成员函数特点
继承中成员函数的特点
方法的重写:发生在子父类中
方法的重载:发生在一个类中
class Fu{
int age = 45;
Fu(){
super();
talk();
System.out.println("父类构造函数......");
}
void talk(){
System.out.println("爸爸会讲中文......");
}
}
class Zi extends Fu{
int age = 18;
Zi(){
//super();//super和this,只能存在一个
System.out.println("子类构造函数......");
return;
}
Zi(int age){
this.age = age;//This 是指向本类的指针
}
void show(){
System.out.println(super.age);
return;
}
void talk(){
System.out.println("儿子会讲中文......");
}
}
class ExtendsDemo2{
public static void main(String[] args){
new Zi();//没有名字的对象,匿名对象
}
}
方法重写
子类中出现与父类一模一样的方法时,会出现覆盖操作,也成为重写或者覆盖
重写覆盖注意:
重写方法是必须和被重写方法具有相同的方法名称,参数列表和返回值类型。 覆盖时,子类方法权限一定要大于等于父类方法权限()
静态只能覆盖静态。 父类中的私有方法不可以被覆盖。
子类的实例化过程
子类中所有的构造函数默认都会访问父类中空参数的构造函数,因为每一个构造函数的第一行都有一条默认的语句super();
子类会具备父类中的数据,所以要先明确父类是如何对这些数据初始化的。
当父类中没有空参数的构造函数时,子类的构造函数必须通过this或者super语句指定要访问的构造函数。
/**
子类对象调用时,会调用父类的构造函数,super语句
计算机会默认添加并调用父类默认构造函数,若要调用
父类有参构造函数,需要特别写出super(参数)
*/
class Fu{
int age = 45;
Fu(){
super();
talk();
System.out.println("父类构造函数......");
}
void talk(){
System.out.println("爸爸会讲中文......");
}
}
class Zi extends Fu{
int age = 18;
Zi(){
//super();//super和this,只能存在一个
System.out.println("子类构造函数......");
return;
}
Zi(int age){
this.age = age;
}
void show(){
System.out.println(super.age);
return;
}
void talk(){
System.out.println("儿子会讲中文......");
}
}
class ExtendsDemo2{
public static void main(String[] args){
new Zi();//没有名字的对象,匿名对象
}
}
子类对象实例化过程(文字描述 大概)
Main函数进栈New Zi 堆内子类中有一个父类空间 方法区子父类函数加载
调用new 构造对象Zi Zi类构造函数进栈
super调用父类构造函数
(父类构造函数进栈)
调用talk (talk函数进栈)(talk函数出栈)
(父类构造函数出栈))
(super执行完 子类构造函数执行完毕 出栈)main函数执行完毕出栈
子类对象实例化过程(图描述 大概)

3.6 多态
含义:
相同的消息发给不同的对象而引发不同的行为
字面意思就是多种形态:
- Java中表现形式: fu f = new Zi();
- 父类或接口中的引用指向子类对象
优点:
- 提高了程序的扩展性和后期可维护性
多态前提
- 需要存在继承或实现关系
- 要有覆盖操作

自动类型提升
abstract class Animal{
abstract void eat();
}
class Cat extends Animal{
public void eat(){
System.out.println("小猫喵喵吃饭...");
}
//猫独有的方法
public void catchMouse(){
System.out.println("小猫抓老鼠...");
}
}
class Dog extends Animal{
public void eat(){
System.out.println("小狗汪汪吃饭...");
}
}
class DuotaiDemo{
public static void main(String[] args){
//Cat c = new Cat();
//c.eat();
Animal a = new Cat();// 自动类型提升的问题
//限制了对猫的特有功能的访问
//专业说法:向上转型,将子类特有的方法隐藏,不能使用子类特有的方法
a.eat();
//判断复杂数据类型
if(a instanceof Cat){
Cat c = (Cat)a;//专业说法:向下转型
}
}
}
Animal类型提升至Cat类型
但是限制对象a对cat类特有功能的访问
向上转型,将子类特有方法隐藏 ,不能使用子类特有方法
智能推荐
05:最大值和最小值的差
原题链接 总时间限制: 1000ms 内存限制: 65536kB 描述 输出一个整数序列中最大的数和最小的数的差。 输入 第一行为M,表示整数个数,整数个数不会大于10000; 第二行为M个整数,以空格隔开,每个整数的绝对值不会大于10000。 输出 输出M个数中最大值和最小值的差。 样例输入 样例输出 源码...
java判断奇偶数注意点
如果让我们用java写一个方法来判断一个整数是奇数还是偶数,相信很多人很快能写出来,而其中可能就会有下面这种: 这样写有没有什么问题呢? 初步看,没什么问题,不过,真没问题吗?输入-1试试看: 结果为false诶,难道-1不是奇数?赶紧换成-3在试试,结果还是false。 究竟发生了什么,我们看看-1和-3分别与2求余是什么结果: 结果都是-1,这就要引出java的一个特性了,java求余结果与左...
mac终端使用ssh连接虚拟机(也就是连接远程服务器)
配置host 我们可以借助第三方工具SwitchHosts;SwitchHosts是开源的,可免费下载 本机ip地址是常开状态,我们公司还有一个预发布环境的host需要配置,跟本地配置host是一样的,只是ip不一样。 本地配置host如下图: ssh连接虚拟机 mac终端自带ssh,不需要我们下载任何东西 ps:虚拟机的账号和密码需要公司给你开 直接上命令 这样就连上你的虚拟机了,如下图所示: ...
DBSCAN聚类算法原理
概念 ϵ邻域: 给定点的ϵ为半径的区域 核心点(core points): 如果点p的ϵ邻域内的点数大于minPts,那么p是核心点 直接可达(directly reachable): 核心点p到其ϵ邻域内的所有点是直接可达的。(注意必须是p必须是核心点) 可达(reachable): 如果存在一条路径p1=p,p2,...,pn−1,pn=q,如果对于任意i,pi到pi+1是直接可达...
Web前端三大核心技术-CSS
Web前端三大核心技术-CSS 文章目录 Web前端三大核心技术-CSS CSS概述 CSS引入 CSS选择器 基本选择器 关联选择器 组合选择器 伪元素选择器 Div与Span Div示例 Div与Span区别 Div的边框样式 Div内边框(padding) Div外边框(margin) 两个行内元素的margin: 父子块的margin Div浮动 CSS定位 绝对定位 相对定位 CSS文字...
猜你喜欢
java基础第一课
Java基础第一课 #环境配置 1.先找到本地jdk的安装路径 2.计算机-点击高级系统设置 3.环境变量点击进去配置 4.配置jdk的路径 5.配置Path: Win8或者10系统: Win7: 6.最后重新启动WIN+R,然后cmd 输入javac,查看结果,出现以下情况,则配置没问题。OK。 二上午的课 ##做乌龟 //1.創建窗躰對象 ctrl+shift+o----快速導包 JFrame...
JavaScript也玩私人订制——玩转函数柯里化
函数式编程是一种被部分JavaScript程序员推崇的编程风格,更别说 Haskell 和 Scala 这种以函数式为教义的语言。原因是因为其能用较短的代码实现功能,如果掌握得当,能达到代码文档化(代码本身具有很高可读性甚至可以代替文档)的效果,当然,泛滥使用也会使代码可读性变差。 而柯里化(Currying)是一个属于函数式编程的一个常见的技巧。简单来说,函数柯里化就是对高阶函数的降阶处理。 我...
多比特跨时钟域之握手及DMUX
一、握手toggle 握手又称结绳法,适用场景为数据有效信号在数据信号前一个周期或数据有效信号在数据的第一个周期,且在握手期间,数据需要保持不变,直到源时钟域收到了解绳的有效信号。 源码如下: testbench如下: 仿真结果如下: 其中G1中为源时钟域信号,G2为目的时钟域信号 二,DMUX 原理图如下: DMUX适用于慢时钟域向快时钟域传递(因为两级同步器),且数据有效信号在数据...
比特币源码解析:RPC详解
比特币源码解析:RPC详解 这篇文章主要分析rpc模块代码的一个整体逻辑,详细的代码讲解,请关注下一篇文章 在这里,我们暂时先抛开bitcoin代码,仅仅来谈RPC,提到RPC大家肯定首先会想到远程过程服务调用,既然是调用,那就肯定存在一个client端和一个server端,clent端与server端通过RPC这个黑盒通过http请求进行交互,那么就有一个问题,我自定义的json格式的字符串(这...
python数据可视化——plotly篇(学习Python 第12天)
最近在**院实习,需要撰写土地全生命周期的年报,今年多期的数据需要可视化。以前的图片样式太过普通,领导想要一些样式精美的图表,无意发现了python的plotly库,可以绘制十分精美的图表。 学习资源: 1、官网在这里 2、plotly绘图说明,这篇博客讲解十分详细 3、本文参考这篇文章(可视化神器–Plotly) 安装plotly 使用 导入库文件 1. 绘制折线图 2. 绘制散点图...
