欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java学习笔记---面向对象

程序员文章站 2024-03-12 23:21:27
...

一、什么是面向对象程序设计

1)面向对象程序设计就是把问题分解为若干对象,分析每个对象具有哪些特征与行为

2)面向对象程序设计就是以对象为中心,通过给对象发送消息(调用方法)解决问题

3)面向对象程序设计与面向过程程序设计相比,更符合人的自然思维方式

4)面向对象程序设计的特点:封装,  继承,  多态,  (抽象)--------「严格意义上,抽象不是面向对象程序设计特点,抽象是面向对象程序设计的一种方法」

二、对象与类的概念

Java是一门面向对象的程序设计语言

	万物皆对象. 现实生活中的任意的物体都可以看作是对象,如: 		
		使用的每台电脑 		
		养的每一条小狗

	类是一组对象相同属性与相同行为的抽象。
		所有的同学都有的相同属性: 姓名, 年龄, 性别, 成绩
		所有的同学都有的相同行为: 学习, 吃, 睡…

	对象与类的关系:
		对象是具体的,类是抽象的
		类可以看作是 一个模板, 对象就是类的一个实例(instance)

三、类的定义与对象的创建

1、定义类与创建对象的语法

在Java中需要先定义类,再通过类创建对象,创建对象的过程也叫对象的实例化

1.1、编写类

Java学习笔记---面向对象

1.2、创建对象

	语法格式:   类名  对象名 = new 类名();

⚠️:注意:1:一个类可以创建任意多的对象,每创建一个对象都在堆内存中开辟一块空间进行储存。
2、在堆中new出来的才是真正的对象,对象名准确的说是对象引用。

1.3 、构造方法

Java学习笔记---面向对象

1.4、this关键字

this关键字的作用

1.当参数名/局部变量名 与字段重名, 通过this访问字段. 			

this代表当前对象
如果是在构造方法中,当前this对象是指new运算符刚刚创建的对象 。
如果不是构造方法,,当前this对象是指调用该方法的对象。

2.在构造方法中,可以通过this()来调用另外的一个构造方法.		

this()调用构造方法的语句必须作为第一条语句存在。

四、static关键字

Java学习笔记---面向对象

五、面向对象的三大特点

1、封装

1.1、什么是封装:

        将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类所提供的方法来实现对内部信息的操作和访问。

1.2、封装的优点:

        a. 良好的封装能够减少耦合。便于修改,提高代码的可维护性。
        b. 只能通过预先设定的方法来访问数据,从而在该方法里加入控制逻辑,限定对成员变量的不合理访问。
        c. 隐藏类的实现细节。

1.3、如何封装

(1)使用private把字段修饰为私有的, private私有字段只能在当前类体中使用

(2)提供公共的getter/setter方法实现对字段的访问
         ①getter返回字段的值
         
         ②setter设置字段的值, 必要时,在setter方法中对接收的数据进行验证
         
         ③如果只有getter没有setter就是只读字段

2、继承

Java学习笔记---面向对象

3、多态

Java学习笔记---面向对象

六、final关键字

Java学习笔记---面向对象

七、访问修饰符

Java学习笔记---面向对象

八、抽象类

1、抽象方法

当类的某个操作无法具体实现,在不同的子类中实现方式不同,这种情况下可以把该操作定义为抽象方法.抽象方法使用abstract修饰,只有方法的声明没有方法体,如:
public abstract void fly();

2、抽象类

2.1、为什么定义抽象类

1)含有抽象方法的类必须定义为抽象类;
2)对事物进行更高层级的抽象时会形成抽象类
      如 :把小猫抽象为Cat类,把小狗抽象为Dog类, 把小狗,小猫可以进一步抽象为Pet宠物类. 宠物类无法具体化,就可以定义为抽象类.

2.2、抽象类特点

1)只要使用abstract修饰的类就是抽象类, 抽象类中可以没有抽象方法,但是含有抽象。

2)子类继承了抽象类,需要重写抽象类的抽象方法,如果没有重写所有的抽象方法,则子类也需要定义为抽象类;

3)抽象类不能实例化对象, 抽象类的引用赋值子类对象或者匿名内部类对象;

4)抽象类虽然不能实例化对象,但是抽象类中肯定含有构造方法,子类创建对象时需要先执行父类抽象类的构造方法.在抽象类中也可以定义普通类中有实例变量,实例方法,静态变量,静态方法等;

5)abstract与final不可以一起使用.

九、接口

1.1、概述

     Java中的接口可以先简单的理解为对某个功能的封装, 用来扩展类的功能.

2.2、接口的定义与实现

2.2.1、定义接口的语法:

[修饰符]  interface  接口名 {
	接口中封装的功能用方法表示,
	需要注意:接口中的方法默认使用public abstract修饰}

2.2.2、实现接口的语法

[修饰符]  class 类名  implements   接口{
	类实现了接口,需要重写接口的抽象方法}

2.3、接口说明

1)接口可以简单的理解为功能的封装,功能用方法表示,接口中的方法默认public abstract修饰;

2)类实现了接口,需要重写接口的抽象方法,如果没有重写所有的抽象方法,则类也需要定义为抽象类

3)接口是一种引用数据类型, 但接口不能实例化对象, 接口引用赋值实现类对象或者匿名内部类对象. 
通过接口引用调用抽象方法时,实际执行的是实现类对象的方法,称为接口多态

4)接口中的内容在JDK8中包含四部分:默认public abstract修饰的方法, 默认public static final修饰的字段; 
在JDK8中接口新增了static修饰的方法,default修饰的方法 

5)接口支持继承,并且支持多继承,即一个接口可以同时继承多个接口.

2.4、抽象类与接口的区别

相同点:

	1)都可以定义抽象方法
	
	2)都不能实例化对象

不同点:

1)本质不同, 接口是功能的封装,解决对象能干什么; 抽象类对事物的抽象,解决对象是什么

2)内容不同, 接口只包含四部分内容; 抽象类除了抽象方法外,构造方法,实例变量,实例方法,静态变量,静态方法都可以定义

3)接口支持多继承, 类只允许单继承

4)应用场景不同. 如果仅仅是为了扩展功能,优先选择接口

有时使用接口能完成功能,使用抽象类也可以.接口与抽象类如何选择?

接口是功能的封装,解决对象能干什么; 抽象类对事物的抽象,解决对象是什么
如果仅仅是为了扩展功能,优先选择接口

相关标签: Java