面向对象(OOP)

面向对象的本质是以类的方式组织代码,以对象的组织(封装)数据。
面向对象有三大特征:封装,继承,多态。

对象与类的关系

类是抽象的数据类型,是对某一事物的整体描述。
对象是抽象概念的具体实例,例如张三是人的具体。
具体理解,还需要在代码中去理解。
这里尽量用简单且少的代码去理解对象与类;

对象的创建

要想有对象,就得现有类,对象是类的实例化。
使用new关键字创建对象,
在实践中要注意,在一个项目应该只存在一个main方法!!

Student student = new Student();//实例化一个student对象
//使用new时,会分配空间,并进行对象的初始化,以及对构造器的调用。

具体使用

首先定义一个类

class Demo {public Demo() {System.out.println("构造方法被调用了");}
}

定义完成后,创建一个Demo对象。当创建对象时,构造方法被调用。

public class Demo2 {public static void main(String[] args) {Demo d = new Demo();}
}
//新创建了一个Demo类型的d,这就是将类实例化

构造器

在上一个代码中,我们便使用了构造器。
什么是构造器,一个类即使什么也不写,也会存在一个默认方法,即构造器;
实际上,在每一个类中,都会存在一个我们看不见的,与类名同名的方法,当我们实例化类的时候,该方法就会被调用


public class A{public A(){//这就是一个构造方法。}
}

构造器特点:

  • 与类名相同
  • 无返回类型,也不能写void
  • 使用new的本质是调用构造器
  • 构造器一般用来初始化值
  • 如果定义了有参构造,必须再定义无参构造

默认的初始化类型

  • 数字:0,0.0;
  • char:/u0000
  • boolean:false
  • 引用:null
  • String: null

实际上,String也是引用类型。

面向对象三大特性

在我们的Java中的核心思想就是面向对象,面向对象有三大特征:

封装
继承
多态

封装

高内聚,低耦合。
高内聚:类的内部细节由自己完成,不允许外界干涉
低耦合:尽量暴露少的方法供外界使用。
封装一般是对属性的封装,少量的方法封装。

封装的核心是私有

private 变量  //属性私有化

私有属性话后,再提供public的get、set方法
简单来说,封装就是通过private关键字,让被私有化的属性不可以被类外的方法调用,从而实现对数据的管理。

继承

继承的本质是对某一批类的抽象,从而实现对现实世界的建模
extends
类似于子承父业,extends是扩展的意思,子类是父类的扩展。
是类与类之间的关系。
类只有单继承,没有多继承,接口可有由多个接口。

子类会继承父类所有公共的方法属性

修饰符开放等级:

  • public,开放等级最高,可以在任何一个类中被调用,不管同包或不同包,
    是权限最大的一个修饰符
  • protected,受保护的,能在定义它们的类中,同包的类中被调用。如果有不同包的类想调用它们,那么这个类必须是定义它们的类的子类
  • default,默认的,默认权限即同包权限,同包权限的元素只能在定义它们的类中,以及同包的类中被调用
  • private,私有的,只能在定义它们的类中使用,在其他类中不能调用

所有的类,都默认继承object类,idea中ctrl+H可以查看类的继承

this

this.属性名,代表调用当前对象的属性。

class Demo {String name;public Demo(String name){this.name = name;}
}

也就是说,那么代表传入的参数,而this.name代表的是当前类创建的对象的属性。

supper

代表父类的引用,用于访问父类的属性,方法,构造器

  • 访问父类属性,但不能访问私有的属性。
  • super调用父类的构造方法,super必须在子类的构造器中,且是第一行
  • 调用时,有祖宗类时,且调用的方法名相同时,遵循就近原则
  • super和this不能同时调用构造方法

final

是一个关键字,表示最终的,不可变的,修饰变量,方法,类
修饰的类无法被继承
修饰的方法,该方法无法被重写。
final修饰的局部变量一旦被赋值,就不能改变。
final修饰的变量只能付一次值

重写

重写都是方法的重写
需要有继承关系,是子类重写父类

  1. 方法名必须相同
  2. 参数名必须相同
  3. 修饰符可以扩大,但是不能缩小。
  4. 抛出异常,范围可以被缩小 ,但不能扩大。

多态

多态就是同样的方法根据发送对象的不同而采用不同的行为方式
是建立在封装和继承的基础之上的
方法的重载体现了多态。
方法的重写体现多态。
对象的多态时多态的具体体现。

一个对象的编译类型和运行类型可以不一致

A a = new B();//父类的引用指向b类

编译类型在定义时就确定了,运行类型是可以改变的

A a = new B();//父类的引用指向b类,a类型已经确定
a = new C();//但是可以改变运行类型,C为A的子类

父类和子类有联系,类型转换异常:ClassCastException

instanceof
用来判断是否是继承关系,返回为一个布尔类型。
父类 instanceof 子类。

父类引用指向子对象,调用子类的方法,需要进行类型转化,即将父类引用转化为子类型
子类转父类,可能会丢失一些子类方法

static修饰符详解
static修饰方法时,静态的方法可以直接用类名.方法名来调用,而非静态方法需要实例化对象之后才能使用。
静态方法中可以调用静态方法,非静态当中可以调用静态方法,但是静态方法中不能调用非静态方法。
静态代码块

static{//静态代码块
}
{//匿名代码块
}
//匿名代码块跟静态代码块在创建对象的时候就会加载进去

static类型的变量方法在程序执行时会加载到内存里

拓展
静态导入包,之后可以调用类里面的方法。
finll修饰的类,不能被继承

抽象类与接口

abstract修饰的类,变成抽象类。
接口可以多继承

//抽象方法public abstract class Action{public abstract void max(); //只有方法名字,没有方法实现。}

抽象类的所有方法必须有子类实现
抽象类不能new(无实例化),只能用子类实现,是一个约束。
抽象类中可以有普通方法,但是抽象方法必须在抽象类中。

接口

普通类,只有具体实现。
抽象类:具体实现和抽象方法都有
接口:只有规范,自己无法写方法。(约束和实现分离)关键字interface
接口是面向对象的精髓,接口需要有实现类,通过implement,可以一个实现类有多个接口。
实现类需要重写接口中的方法。

内部类

简单来说,就是类里包含另一个类,有点类似于循环的嵌套用法。


public class A{//这是外部类public class B{//这是内部类}
}

调用时,需要通过外部类来调用内部类


public static class Active{public static void main(String [] args){A a = new A();  //创建一个外部类对象A.B b = a.new B(); //通过外部类指向一个内部类对象}
}

内部类可以访问到外部类的私有属性,私有方法。
当内部类是静态时无法访问,因为静态是在程序创建时就已经加载完毕。但是外部类也是静态方法时可以访问。
一个文件中只能有一个public class,但可以有多个class。

匿名内部类

没有名字的内部类,直接定义,直接调用。


new A().eat();
//使用匿名内部类来调用方法。

Java入土---面向对象(OOP)相关推荐

  1. java怎样用类模板创建对象_java入门(十四) | 面向对象(OOP)之类和对象

    上一期是变量,在java中变量总是无处不在,而变量其意就是可以改变的数,在一般情况下我们可以以变量类型,变量名,变量值来描述它 这一期是给面向对象(OOP)开了一个头,对他的概念,三大特征有了一个基础 ...

  2. java基础(三):java面向对象OOP

    java面向对象OOP 基本概念 面向过程与面向对象 面向过程:关注代码实现的细节.复用性 面向对象:先把每个过程的代码实现细节整合到对象中,只要找到对象就能拥有对象身上所有的功能. 面向对象基于面向 ...

  3. 第一阶段:Java基础总复习一一一和一一一面向对象OOP总复习

    一.Java基础 0.Maven的介绍: 官网:https://maven.apache.org/download.cgi (1)Maven是什么? Maven 是 Apache 开源组织奉献的一个开 ...

  4. java面向对象oop阶段总结

    名词解释 笔记0927 *对象数组起始位置可以初始化几个元素 // 1.功能五 判断队名是否重复2.给队起名:3.队伍建队用flag循环判断是否队伍已满: 2.功能六 遍历二维数组子元素的方法 *3. ...

  5. Java面向对象(OOP)入门

    一.面向对象概述 Java是面向对象思想的高级计算机编程语言. 面向对象(简称:OOP)是一种以事物为中心的编程思想,是一种程序开发的方法,它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件 ...

  6. Java 基础 - 面向对象(不错N多教程集合)

    著作权归https://pdai.tech所有. 链接:Java 基础 - 面向对象 | Java 全栈知识体系 本文主要介绍Java OOP 面向对象基础和相关类图.@pdai Java 基础 - ...

  7. java 168转换成861_java实验-java语言面向对象编程基础

    java实验-java语言面向对象编程基础 (12页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 8.90 积分 广州大学学生实验报告广州大学学生实验报告 ...

  8. 【Java】面向对象是什么

    自从开始接触java,就有人告诉我说,java是面向对象的编程语言.最多就是new一个对象,但是并不知道对象是什么.我以为对象就是一个class类,没有什么特别的.但开始找工作的时候,面试的人问了一个 ...

  9. JAVA的面向对象编程

    JAVA的面向对象编程 面向对象主要针对面向过程. 面向过程的基本单元是函数. 什么是对象:EVERYTHING IS OBJECT(万物皆对象) 全部的事物都有两个方面: 有什么(属性):用来描写叙 ...

最新文章

  1. Python 知识点笔记一常用数据类型
  2. 【转载】2009年春晚节目单提前揭晓
  3. Linux0.11内核--系统中断处理程序int 0x80实现原理
  4. java 调用htm中js函数_Lua中调用C函数(lua5.2.3)
  5. JDK与Java SE/EE/ME的区别
  6. python 录入数据不重复_pythonDjango批量导入不重复数据
  7. 专题地图符号设计与构图
  8. 个人博客或网站快速被搜索引擎收录
  9. FFmpeg —— ffplay源码 - 制作桌面动态壁纸
  10. 图表Chart.js入门教程(附代码)包括线性、柱状、圆形、饼形图
  11. 问题 B: 栈的操作问题
  12. 三星note5 android 7,国行三星note5安卓7.0降级6.0刷机包
  13. [HCTF 2018]admin 1
  14. ViewPage2简单使用
  15. SAP GUI 730 windows 免费下载
  16. Nodemcu 驱动WS2812点灯红色变绿色的原因及解决
  17. SCU - 4486 Easy Problem VI
  18. 批处理写的系统文件替换
  19. Java 征途:行者的地图
  20. sap服务器查看系统日志目录,服务器怎么看操作日志

热门文章

  1. 学习win32汇编指令:lea和offset
  2. ssm和springboot的区别
  3. python可以爬取wind数据库吗_如何利用Python来爬取近百万条数据?数据库会炸吧?...
  4. 【最大似然估计】详解概率论之最大似然估计
  5. oracle open_cursors未关闭问题解决
  6. Java注释:单行、多行和文档注释
  7. HTML5中litle标签的作用,Litle是什么意思
  8. C++可视化界面EasyX图形库的安装以及简单使用
  9. FWT(快速沃尔什变换)零基础详解qaq(ACM/OI)
  10. 递归算法转换成非递归算法