JAVA面向对象整理

类与对象

面向对象编程的三大特征:
在这里插入图片描述

在这里插入图片描述
其中 类是抽象的,是对大量具体客观事物的升华,对事物如何刻画呢?这里,就用到属性和方法。
属性:就是该类事物的一个名词描述,一个特征。
**方法:**就是该类事物的一个动词描述,是一个行为。
对于属性和方法要 对其的权限做一个设定,(private,public等等)

所有的类都继承 java.lang包下的 Object类,也就是说在java中的所有类都天生的继承(面向对象编程的一个特征)Object类中的方法:toString(),equals(),hashCod一般情况下 Object类中的方法需要重写。

**	 方法里面有一个比较特殊的叫构造方法,其实在根据类创建对象时自动调用,系统默认提供无参构造函数,也可以自己重写构造函数。

**
为了简化开发,提高效率,提出了继承的概念(暂时这么理解吧)!辛辛苦苦的开发出一种类,如果还需要另外一个类(此类和之前的类有某些共性或者说此类和之前类中的某些方法重叠),那么 我可以使用之前的类啊!如何使用呢?继承啊!(就相当于儿子继承老子的财产);在Java中采用关键字 extends ,那么继承了哪些东西 ? 属性,方法,重点注意的是构造方法不能继承!子类继承了父类,就不需要重复的造轮子,写重复的代码了!倘若有些继承得到的方法不合适了,那该怎么办呢?可以对该方法在子类中重新写啊!这就是重写的概念(Override)!

在子类的构造方法中一定会调用  父类的某个构造方法。这时可以在子类的构造方法中通过super关键字指定调用父类的哪个构造方法,如果没有指定,在实例化子类对象时,会默认调用 父类无参的构造方法

结合继承和重写,为了方便开发,提出了一种叫 抽象类的概念 !(abstract class)。抽象类不能创建对象,那抽象类是用来干什么的?抽象类是专门用来被其它类继承的,注意是专门,也就是*“在继承抽象类时,子类必须重写抽象方法"!*
其实抽象类就相当于子类的模板(打了一个底子),抽象类被子类继承,子类可以在抽象类的基础上进行操作。

了抽象类的概念,引入接口!那为什么引入接口呢?抽象类为子类对象提供了一个模板,但是存在一个问题,就是子类对象只能继承一个抽象类,如果有多个抽象类的话,那么就坑爹了!
那怎么办呢? Java引入了接口,一个子类可以 使用 多个接口,就可以重写多个接口中的方法了。接口是一种特殊的抽象类,它不能包含普通的方法,其内部的所有方法都是抽象方法,它将抽象进行的更彻底。

多态的理解

下面就是类中的多态的概念! 先说说多态的几个条件: ①继承 ②方法的重写 ③父类引用指向子类对象

多态是指不同类的对象在调用一个方法时所呈现出的多种不同的行为。通常来说,在一个类中定义的属性和方法被其它类继承或重写后,当把 子类对象 直接 赋值给 父类引用变量时,相同引用类型的变量调用同一个方法所呈现 的多种不同形态、通过多态,消除了 类之间的耦合关系,大大提高了 程序的扩展性 和 可维护性。

							 多态指的是在一个类中定义的属性和功能被其它类继承之后,把子类对象直接赋值给父类对象的引用变量时,相同引用类型的变量调用同一个方法所呈现的
							 
							 多种不同行为特性。例如,当听到“Cut"这个单词时,理发师的行为表现是剪发,演员的行为表现是停止表演等。不同的对象所表现的行为是不一样的。

对象类型的转换:
在多态的学习中,涉及将子类对象 当作 父类类型使用的情况,此种 情况 在 Java 的语言环境中 称为 “向上转型”
需要注意的是此时不能通过 父类变量去调用 子类特有的方法;如果想要调用 子类特有的方法,可以通过向下进行 “强制类型转换”
在进行转型时要注意转型是否 是否出错 即 ClassCastException,这时可以 通过 关键字 instanceof判断一个对象 是否为某个类(或接口)的实例或者子类实例,语法格式如下:

										对象(或者对象引用变量) instanceof 类(或接口

对象是根据类创建的具体的事物:
有了类(模板),我们就可以创建对象,对象如何创建呢? 类 类名引用 = new 类(参数)
其中 类名引用 为指向 创建对象的地址 ,通过 引用.field 可以访问 对象中的成员变量(注意封装性);通过类名引用.方法名(参数)就可以使用对象中的方法。

内部类:(尤其注意匿名内部类的使用)
				 		在Java中,允许在一个类的内部定义类,这样的类 称作内部类,这个内部类 所在的类称作  外部类。
				 		
				 		在实际情况中,根据内部类的位置、修饰符和定义方式的不同,内部类可以分为4种形式:成员内部类、局部内部类、静态内部类和匿名内部类。
				 		
				 		
				  		成员内部类:  在一个类中除了可以定义成员变量、成员方法,还可以定义类,这样的类被称作 成员内部类。在成员内部类中,可以访问外部类的所有成员,包括成员变量和成员方法;在外部类中,同样可以 访问成员内部类的变量和方法。
				  		
				  		局部内部类:就是定义在某个 局部范围中的类,它和局部变量一样,都是在方法中定义的,其有效范围只限于方法内部。在局部内部类中,局部内部类可以访问外部类的所有成员和方法,而局部内部类中的变量和方法却只能在创建该局部内部类的方法中进行访问
				  		
				  		
				  		静态内部类:所谓静态内部类,就是使用static关键字修饰的成员内部类。与成员内部类相比,在形式上,静态内部类只是在内部类前增加了static关键字,但在功能上,
				  		
				  		
				  		匿名内部类:(很重要)
				  		当方法的参数 为接口 或抽象类 或 实现某个接口的类 时,可以  根据接口,抽象类创建一个类,即实现参数接口实现类;也可以为了简单不实现 该接口、抽象类,使用
				  		下面提出的匿名内部类。
				  		
				  		
				  		在Java中 调用某个方法时,如果该方法的的参数 是一个接口类型,除了可以传入一个参数接口实现类,还可以使用匿名内部类实现接口来作为该方法的参数。
				  		匿名内部类其实就是没有名称的内部类,在调用包含有 接口类型参数的方法时,通常  为了简化代码,不会创建  一个接口的实现类作为方法参数传入,而是直接通过匿名内部类的形式传入一个接口类型参数,在匿名内部类中直接完成方法的实现。
				  		  
				  		  创建匿名内部类的基本语法格式如下:
				  		  							new 父类接口(){
				  		  							//匿名内部类实现部分
				  		  							              }

**

垃圾回收:

**
在Java中,当一个对象成为垃圾后仍会占用 内存空间,时间一长,就会导致内存空间的不足,就会导致内存空间的不足。针对这种情况,Java中引入了垃圾回收机制(java Gc).有了这种机制,程序员 不需要过多 关心 垃圾对象的回收问题,Java虚拟机会 自动回收垃圾对象所占用的内存空间。

常用关键字小结

在这里插入图片描述
this:指代当前对象,用于在方法中访问对象的其它成员,this(参数1,参数2…):调用其他构造方法

							super:   当子类对象重写父类的方法之后,子类对象将无法直接访问父类被重写的方法。
									 为了解决这个问题,在Java中专门提供了一个super关键字来访问父类的成员,例如访问  父类的成员变量,成员方法和构造方法
									 
									 使用  super关键字调用 父类的成员变量和成员方法:super.成员变量 ;super.成员方法()
									 
									 使用super关键字调用父类的构造方法:  super([参数1,参数2.。。])
									 
						
							
							static:①修饰静态变量:在定义一个类的时候,只是在描述某类事物的特征和行为,并没有产生具体的数据。
									只有通过new关键字创建该类的实例对象后,系统才会为 每个对象 分配内存空间,存储各自的数据。有时候,开发人员
									会希望 某些特定的数据在内存中只有一份,而且 能够被一个类的所有实例  对象所共享。例如某个学校所有学生共享一个学校名称,此时
									完全不必在每个学生对象所占用的内存空间中都声明一个变量  来表示学校的名称,而可以在对象以外的空间声明一个表示学校名称的变量让所有
									对象共享。
									
									②静态方法: 开发人员有时会希望在不创建对象的情况下就可以调用某个方法,这种情况下就可以使用静态方法。
											静态方法可以通过如下两种方式来访问:        类名.方法  
											                             
											                             或                                           实例对象名.方法
											                             
											                             
									
									
									③静态代码块:在Java类中,使用一对大括号包围起来的若干行代码包围起来的若干行代码被称为一个代码块,用static关键字修饰的代码块称为   静态代码块。
									          当类被加载时,静态代码块会执行,由于类只加载一次,因此静态代码块也只能执行一次,在程序中,通常会使用静态代码块来对类的成员变量进行初始化。
							
							
							final:用于修饰类、变量和方法,它有“不可更改"或者"最终"的含义,因此 被 final修饰的类,
									①final修饰的类不能被继承
									②final修饰的方法不能被重写
									③final修饰的变量(成员变量和局部变量)是常量,只能赋值一次
									
									
							
							
							instanceof:判断一个类或者对象是否为某一个类或者对象的子类







 Java将内存 分为两种,即 栈内存和堆内存。其中栈内存用于存放基本类型的变量和对象的引用变量(如Person p),堆内存用于存放  由new创建的对象和数组。

猜你喜欢

转载自blog.csdn.net/ZHOUJIAN_TANK/article/details/88356318