JAVA基础知识之面向对象!

简介: JAVA基础知识之面向对象:

JAVA基础知识之面向对象:

1.封装(面向对象特征之一)

  是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。getXxx()和setXxx()


好处:将变化隔离;便于使用;提高重用性;安全性。


封装原则:将不需要对外提供的内容都隐藏起来,把属性都隐藏,提供公共方法对其访问。


A:类的书写:

一个类中可以书写的成员有以下几种:


成员变量:其实对应的就是事物的属性。


成员方法:其实对应的就是事物的行为。


set和get函数;


其他一般函数;


构造函数;


注意:先有类后有对象,类是对象的抽象,对象是类的实例化。


a:成员变量和局部变量的区别:


1:成员变量直接定义在类中。


  局部变量定义在方法中,参数上,语句中。


2:成员变量在这个类中有效,有默认值。


局部变量只在自己所属的大括号内有效,大括号结束,局部变量失去作用域。(必须初始化,无默认值)


3:成员变量存在于堆内存中,随着对象的产生而存在,消失而消失。


局部变量存在于栈内存中,随着所属区域的运行而存在,结束而释放。


B:构造方法:


概念:构造函数就是在创建对象时由JVM自动调用的函数,作用是在创建对象时给对象的成员变量赋值的;


写法:


修饰符:构造函数只能使用访问权限修饰符修饰;如public、private等;不允许使用static关键字修饰构造函数


返回值类型:构造函数没有返回值类型,连void都没有;这个是区分一个函数是否是构造函数的标准


函数名:构造函数的函数名必须和类名一致


参数列表:构造函数可以重载,参数列表可以根据需要定义;


return语句:所有Java的函数都需要通过return语句出栈,所以构造函数中也有return语句,只是因为不返回数据,所以一般不写;


a:默认构造方法:

在Java中,所有类都有构造函数,使用new关键字创建对象时都会调用构造函数;如果类中没有写,则编译器会自动添加一个构造函数,这个构造函数就是默认构造函数。构造函数没有参数;如果类中手动书写了构造函数,就不会有默认构造函数;



一个类中,可以有多个构造函数,因为它们的函数名称都相同,所以只能通过参数列表来区分。所以,一个类中如果出现多个构造函数。它们的存在是以重载体现的。


b:构造方法和一般方法有什么区别呢?

1:两个函数定义格式不同。


2:构造函数是在对象创建时,就被调用,用于初始化,而且初始化动作只执行一次。


   一般函数,是对象创建后,需要调用才执行,可以被调用多次。


c:构造代码块和构造函数有什么区别?

构造代码块:是给所有的对象进行初始化,也就是说,所有的对象都会调用一个代码块。只要对象一建立。就会调用这个代码块。


构造函数:是给与之对应的对象进行初始化(给成员变量赋值)。它具有针对性。


C:对象内存位置

 对象在内存中的位置:


对象由new关键字创建,如同数组,实体存在于堆内存中


任何事物均可以定义成类,创建对象,属于引用类型


而对象的引用变量是一个普通变量。存储的值是该对象堆内存中的地址。


D:this关键字

this表示本类对象


this关键字,一般出现在不带static关键字修饰的函数里面,表示对调用这个函数的对象的引用,也就是哪个对象调用这个函数,函数中的this就指向那个对象;


一般用来区分成员变量和局部变量;


作用:


1.this表示本类对象


2.区分同名变量和局部变量


3.this(参数类表)调用本类的构造方法:必须放在代码第一行


一个构造函数中调用本类的其它构造函数:


image.png

image.png

image.png

E:匿名对象

匿名对象就是没有名字的对象;

对象的名字就是保存了这个对象的引用地址的变量;

所以匿名对象,就是指创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量。

image.png

a:匿名对象特点

image.png

image.png

1.匿名对象必须创建的时候就直接使用;


2.匿名对象只能使用一次;


3.匿名对象可以作为方法的返回值或者给方法传参;



2:继承(面向对象特征之二)

a:继承概述:

class 儿子类名 extends 父亲类名

{

   属性列表;

   方法列表;

}

class A extends B

{

   属性列表;

   方法列表;

}

术语 :

A 类是 B 类的子类, 也称为派生类。   Derived class


B 类是 A 类的父类, 也称为基类、超类。 Super class


继承的效果 : 子类从父类继承,就代表子类 `无条件` 拥有了父类 `可继承` 的全部成员属性和方法.


总结 : 子类 "无条件" 拥有父类全部可继承的属性和方法. 继承是类在继承,而不是对象在继承.



父类和子类(派生类)之间的

image.png

继承的注意点

1> 继承是类在继承,而不是对象在继承. 每个对象之间是毫无关系的.对象的属性值相互之间不会影响.


继承的意思: 子类从父类继承.相当于子类拥有了父类的所有成员.这个时候创建一个子类对象,子类中不仅有自己的特有成员也有父类中的共有成员.


2> 什么时候需要使用继承 ? (is a 关系)


当发现多个类具有相同成员的时候,那么就可以使用继承.将共同的成员定义在父类中,让子类去继承.


3> 不要为了仅仅只是得到某个类的成员而去继承.不要为了继承而继承.


如: Worker : Dog (因为 Dog 类中有姓名和年龄) 语法上其实任意的类之间都是可以继承的.情理,逻辑上并不是任意的类之间都可以继承的.只有满足A类是一个B类的时候,才可以拥有继承关系.让A类去继承B类.同样可以理解为只有子类是一个父类的时候,才可以继承.


继承强调的是: 同一个 "物种".

4> 只要有一个成员或方法不是所有子类都拥有的,那么这个成员属性和方法就不应该定义在父类之中. 如: 鸟类中的"fly"方法. 因为并不是所有的鸟类都会飞.只要有一个成员不是所有的子类都拥有的,那么这个成员就不应该定义在父类之中.


5> 子类不能直接访问父类中私有的成员变量(不能继承,但是子类对象的内存中有该属性)


6> 子类一定不要拥有和父类同名的成员变量. 因为子类可以继承父类的成员变量.



3.多态(面向对象特征之三)

 A:接口:interface

说明 : 抽象类中可以有抽象方法, 但同时也可以包含非抽象方法.


定义:如果一个抽象类中所有的方法都是抽象的,则可以将这个类用另外一种方式来定义, 即接口.


注意 :


interface + 接口名    定义一个接口(级别和class相同)

①:接口不是类,不属于java的类继承体系中


2.接口中定义的方法默认使用 “public abstract” 来修饰,且接口中只有抽象方法.


3.接口中变量默认使用 “public static final” 来修饰 .使用类名直接访问. 接口中的变量,都是常量。因此接口中的变量名一般都会全部大写。


接口不能实例化,实际上连构造方法都没有

实现接口:由于接口中的方法都是抽象方法,因此不能通过实例化对象的方式来调用接口中的方法.此时需要定义一个类,并使用 implements 关键字实现接口中所有的方法.


*   1. 语法: class A extends B implements C(接口)


*   2. 如果有抽象方法,普通类必须全部重写,但凡有一个抽象方法没有抽象,此类就必须是抽象类


注意 : 一个类在继承另一个类的同时还可以实现接口,此时 extends 关键字必须位于 implements 关键字之前.


类, 接口 之间产生关系:


类和类之间的关系是继承,使用extends关键字完成

类和接口之间的关系是实现,使用的 implements 关键字完成

接口与多态 : 接口类型可以接收任何实现了该接口的实现类对象.  (多态)


总结:

类和类:继承关系,一个类只能继承一个父类。                          单继承


类和接口:实现关系,一个类可以实现多个接口。           多实现(implements)


接口和接口:继承关系,一个接口可以继承多个接口。 多继承(解决类和类的不能多继承的问题) 格式:A extends B,C;


类和类之间是继承,存在子类和父类的关系。子类需要覆盖父类的方法时,我们称为方法的重写。


类和接口之间是实现关系,实现接口的类,一般称为实现类,实现类中对接口中的方法进行重写的书写。这时称为实现类对接口的方法进行的实现,实现类拥有接口所有的属性和方法.



目录
相关文章
|
22天前
|
搜索推荐 Java
Java的面向对象特性主要包括封装、继承和多态
【4月更文挑战第5天】Java的面向对象特性主要包括封装、继承和多态
15 3
|
22天前
|
Java 程序员 调度
Java中的多线程编程:基础知识与实践
【4月更文挑战第5天】 在现代软件开发中,多线程编程是一个不可或缺的技术要素。它允许程序员编写能够并行处理多个任务的程序,从而充分利用多核处理器的计算能力,提高应用程序的性能。Java作为一种广泛使用的编程语言,提供了丰富的多线程编程支持。本文将介绍Java多线程编程的基础知识,并通过实例演示如何创建和管理线程,以及如何解决多线程环境中的常见问题。
|
1月前
|
Java
java面向对象高级分层实例_实体类
java面向对象高级分层实例_实体类
10 1
|
2天前
|
安全 Java
Java基础&面向对象&继承&抽象类
Java基础&面向对象&继承&抽象类
|
2天前
|
Java
【Java基础】详解面向对象特性(诸如继承、重载、重写等等)
【Java基础】详解面向对象特性(诸如继承、重载、重写等等)
8 0
|
3天前
|
IDE Java 开发工具
Java从入门到精通:1.3.1实践编程巩固基础知识
Java从入门到精通:1.3.1实践编程巩固基础知识
|
3天前
|
Java
Java基础知识整理,驼峰规则、流程控制、自增自减
在这一篇文章中我们总结了包括注释、关键字、运算符的Java基础知识点,今天继续来聊一聊命名规则(驼峰)、流程控制、自增自减。
34 3
|
3天前
|
Java 开发者
Java基础知识整理,注释、关键字、运算符
在日常的工作中,总会遇到很多大段的代码,逻辑复杂,看得人云山雾绕,这时候若能言简意赅的加上注释,会让阅读者豁然开朗,这就是注释的魅力!
37 11
|
7天前
|
安全 Java 机器人
《Java 简易速速上手小册》第2章:面向对象的 Java(2024 最新版)
《Java 简易速速上手小册》第2章:面向对象的 Java(2024 最新版)
19 0
|
10天前
|
存储 Java
Java基础教程(7)-Java中的面向对象和类
【4月更文挑战第7天】Java是面向对象编程(OOP)语言,强调将事务抽象成对象。面向对象与面向过程的区别在于,前者通过对象间的交互解决问题,后者按步骤顺序执行。类是对象的模板,对象是类的实例。创建类使用`class`关键字,对象通过`new`运算符动态分配内存。方法包括构造函数和一般方法,构造函数用于对象初始化,一般方法处理逻辑。方法可以有0个或多个参数,可变参数用`类型...`定义。`this`关键字用于访问当前对象的属性。