----------------------android培训、java培训、期待与您交流!----------------------

Java面向对象

1.面向对象的概念:

面向对象是一种思想,它与面向过程的思想相对应。不考虑过程,只考虑方法调用,获得结果的一种思想。

2.面向对象的意义和优点:

这种思想能降低开发者的代码量,减少重复意义的代码,提高工作效率。众所周知,如今大型项目只靠面向过程的设计会需要巨大的代码量,延长开发周期,很难完成这些项目。使开发者由执行者变成了指挥者,更具有实际的意义。面向对象强调的是对象实例,面向过程强调的是动作,对象将动作进行封装。

3.面向对象的三大特征:封装(Encapsulation),继承(Extends),多态(Polymorphism)。

A.封装

封装:是指隐藏对象的属性和实现细节,仅对外提供公共的访问方式。
封装的好处:提高安全性、提高重用性、将变化隔离、便于使用。
封装的原则:将属性及不需要对外提供的方法都隐藏起来,对外提供方法来访问。
Private私有:一个权限修饰符,用于修饰成员使它的内容只在本类中有效,一般作为封装隐藏属性及方法用。它只是封装的一种体现,而Java最小的封装体是函数。

public class PersonDemo
{public static void main(String[] args) {Person p = new Person();p.setAge(6);System.out.println(p.getAge());}
}
class Person
{private int age = 3;public void setAge(int a){age = a;}int getAge(){return age;}
}

在程序中,我定义了一个Person类,这个类有个私有变量age,在main中无法调用Person.age这个变量,我们在Person中写两个函数setAge和getAge,用来给age赋值和读取。这就是私有类的含义,无法在外部直接调用age。

B.继承:

一个新类可以从现有的类中派生,这个过程称为类继承。现有类称为新类的父类(基类),新类称为现有类的子类(派生类)。
继承的意义:1.提高了代码的复用性。2:让类与类之间产生了联系,给多态提供了前提。
方法:使用extends关键字来实现,即 class 子类 extends 父类。
子类和父类的关系:
成员变量:
当本类的成员和局部变量同名用this区分。
当子父类中的成员变量同名用super区分父类。
子类不能直接访问父类中私有内容。
成员函数:当子父类中出现成员函数一模一样的情况,会运行子类的函数。这种现象,称为覆盖操作,这是函数在子父类中的特性。
函数的两个特征:重载和重写。
重载是指两个返回值类型和函数名都相同的两个函数,他们只有参数不同,这种用参数个数区分不同函数的方法叫做重载。
重写就是覆盖,子类中有与父类中相同的函数,子类中的函数会覆盖掉父类中的函数。
覆盖注意事项:
子类方法覆盖父类方法时,子类权限必须要大于等于父类的权限。
父类的方法是私有的(private),不能覆盖。
静态只能覆盖静态,或被静态覆盖。
以毕老师视频中的电话为例子,见代码:

class Phone{    void call(){}    void show(){    System.out.println(number);    }
}    class NewPhone extends Phone{    void show(){//创建子类的新功能    System.out.println(name);    System.out.println(pic);    super.show();//保留父类原有功能  }
}

什么子类实例化的时候要访问父类中的构造函数呢?
那是因为子类继承了父类,获取到了父类中的内容(属性),所以在使用父类内容之前,要先看父类是如何对自己的内容进行初始化的。所以子类在构造对象时,必须访问父类中的构造函数。为了完成这个必须动作,就在子类的构造函数中加入了super()语句如果父类中没有定义空参数构造函数,那么子类的构造函数必须用super明确要调用父类中哪个构造函数。同时子类构造函数中如果使用this调用了本类构造函数时,super就没有了,因为super和this都只能定义在第一行,所以只能有一个。但是可以保证的是子类中肯定会有其他的构造函数访问父类的构造函数注意:super语句必须要定义在子类构造函数的第一行。因为父类的初始化动作要先完成。通过super初始化父类内容时,子类的成员变量并未显示初始化,等super()父类初始化完毕后,才进行子类的成员变量显示初始化。
一个对象实例化过程:  
Person p = new Person();  
a.jvm会读取指定的路径下的Person.class文件,并加载进内存,并会先加载Person的父类(如果有直接的父类的情况下)。 
b.在堆内存中开辟空间,分配地址。  
c.并在对象空间中,对对象中的属性进行默认初始化。  
d.调用对应的构造函数进行初始化。  
e.在构造函数中,第一行会先调用父类中的构造函数进行初始化。
f.父类初始化完毕后,再对子类的属性进行显示初始化。 
g.在进行子类构造函数的特定初始化。  
h.初始化完毕后,将地址值赋值给引用变量。

C.多态:

可以理解为事物存在的多种体现形态。

多态的体现:父类的引用指向了自己的子类对象。父类的引用也可以接收自己的子类对象。
多态的前提:必须是类与类之间有关系。要么继承,要么实现。通常还有一个前提:存在覆盖。
多态的好处:多态的出现大大的提高程序的扩展性。
多态的弊端:提高了扩展性,但是只能使用父类的引用访问父类中的成员。前期定义的内容不能使用(调用)后期子类的特有内容。
多态的前提:必须要有关系,继承或者实现。要有覆盖。

转型:Animal a = new Cat();自动类型提升,猫直接提升成了动物类型,不能直接访问猫的特有功能。
作用就是限制对特有功能的访问,提高程序扩展性。
专业讲:向上转型。
a.eat();
如果还想用具体动物猫的特有功能,可以将该对象进行向下转型。
Cat c = (Cat)a;向下转型的目的是为了使用子类中的特有方法。
c.eat();       向上转型是为了限定功能使用,提高程序扩展性。
c.catchMouse();
注意:对于转型,自始至终都是子类对象在做着类型的变化。
Animal a = new Animal();
Cat c = (Cat)a;ClassCastException 类型转换异常。
在上下转型的过程在都是子类对象在变化。在父类型和本类型之间转换。
为提高扩展性或者为限制子类的特有功能时向上转型。
当想使用特有功能时向下转型。

【黑马程序员】 学习笔记 - Java面向对象相关推荐

  1. 黑马程序员学习笔记 关于继承

    ------- <a href="http://www.itheima.com" target="blank">android培训</a> ...

  2. 黑马程序员学习笔记-------c++提高编程

    c++提高编程 本阶段主要针对c++泛型编程和STL技术做详细讲解,探讨cpp更深层的使用 1 模板 1.1 模板的概念 模板就是建立通用的模具,大大提高复用性 模板的特点: 模板不可以直接使用,它只 ...

  3. 【b站黑马程序员学习笔记-shell入门编程】

    使用root用户创建并执行test2.sh,实现创建一个shelltest用户,并在其家目录中新建文件try.html 一. [root@localhost ~]# touch test2.sh [r ...

  4. C++随记之模板(黑马程序员学习笔记)

    1.模板分为函数模板和类模板.泛型编程主要思想就是模板.语法template<typename T>.typename表示其后面的符号是一种数据类型,可以用class代替. 2.模板自动类 ...

  5. 黑马程序员----0704期java基础班心得

    ------<a  target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- 黑马程 ...

  6. [黑马程序员C++笔记]P72-P83通讯录管理系统

    目录 系统需求 1.菜单功能 2.退出功能 3.添加联系人 (1)​​​​​​​设计联系人结构体 (2) 设计通讯录结构体 ​​​​​​​(3)main函数中创建通讯录 (4)封装添加联系人函数 (5 ...

  7. [黑马程序员C++笔记]P72-P83通讯录管理系统总体概览

    系统需求 通讯录是一个可以记录亲人.好友信息的工具. 本教程主要利用C++来实现一个通讯录管理系统 系统中需要实现的功能如下: 添加联系人:向通讯录中添加新人,信息包括(姓名.性别.年龄.联系电话.家 ...

  8. 【前端学习笔记】移动web-黑马程序员学习笔记

    移动web-黑马程序员学习笔记 1 字体图标 2 平面转换 2.1 绝对定位元素居中: 2.2 双开门效果 2.3 旋转效果 2.4* 转换原点 2.5 多重转换效果 2.6 缩放 3* 渐变 4 空 ...

  9. 黑马程序员jvm笔记总集

    黑马程序员jvm笔记(一)–程序计数器 虚拟机栈 堆 黑马程序员jvm笔记(二)–方法区 串池 直接内存 黑马程序员jvm笔记(三)–垃圾回收部分心得 黑马程序员jvm笔记(四)–字节码部分心得 黑马 ...

  10. SpringCloud学习笔记,课程源自黑马程序员,笔记持续更新中...

    @SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式: 学习内容 1.服务拆分-服务远程调用: 2.搭建eureka服务: 2.1.eureka服务注册-client 2 ...

最新文章

  1. TX2 安装QT Creator
  2. 面试旧敌之红黑树(直白介绍深入理解)
  3. java验证码识别--2
  4. Invalid config event received: {version=0, server
  5. jquery1.9学习笔记 之选择器(基本元素四)
  6. 需求分析三层境界,你到哪层了?
  7. 用标准C编写COM dll
  8. VS2010/MFC编程入门之二十六(常用控件:滚动条控件Scroll Bar)
  9. kubectl 重启pod_Part4:Pod对象的管理
  10. [diy-windows系统] Windows下dism 集成系统补丁、驱动
  11. 数学建模方法自己归纳总结(建模参考用,包含相应例题以及MATLAB代码)
  12. 电商主播的上山下乡运动
  13. php 万网域名查询接口
  14. 计算机安全标准是什么,计算机安全等级划分标准
  15. [NOI2008] 糖果雨
  16. Unix/Linux编程:客户应用程序------DAYTIME、TIME、ECHO
  17. 双臂14轴机器人YuMi
  18. 服务器迁移需要备份哪些文件?
  19. python列表可以放不同类型_python基础篇数据类型之二——列表(List)
  20. 计算机应用基础模块三项目二,计算机应用基础 高职计算机大类专业 刁爱军模块三 项目二 海报的制作.pptx...

热门文章

  1. android最新版本 note8,别等了 三星S8和Note 8确认无缘升级Android 10系统
  2. python抛硬币正反面的概率_抛硬币连续N次正面后再次正面的概率是多少呢?有疑虑的话咱用Python模拟一下吧...
  3. manjaro状态栏显示实时网速cpu内存等信息
  4. 我的学术诚信与职业道德
  5. Javascript PHP入门
  6. android盒子smb,普通安卓盒子smb方法 - 怀旧游戏长廊 - A9VG电玩部落论坛 - Powered by Discuz!...
  7. Qt5+安装包制作(Qt Installer Framework)
  8. vue 读取本地文件内容
  9. FX3U波特率,FX3U波特率115200,三菱PLC,FX系列PLC更改波特率
  10. 【开源项目】Dynamic-Tp告警系统的源码解析