面向过程和面向对象编程思想
面向过程
POP
:所有步骤依次执行,注重执行的细节。
面向对象
OOP
:创建解决问题的对象,让各个对象调用各自的方法而配合完成。
在面向对象编程
OOP
中,给类中定义的方法,具体的实现过程,其实也是面向过程的。
对象和类
对象Object
某个类的具体实例
类Class
是拥有相同属性和行为的对象的集合。是类的模板。
定义类
创建对象
成员变量、局部变量、静态常量
成员变量:定义在类中的变量,即类的属性。它有默认值。通过对象访问。
局部变量:定义在方法中的变量。它没有默认值。只能在方法中赋值后才能使用。
静态常量:特殊的成员变量,用
final static
修饰。它有默认值。通过类名访问。
修饰符
class
类名
{
int a;//成员变量
final static String
COUNTRY
=
"好兄弟"
;//静态变量
void hh(){ //定义方法
int c=1; //局部变量 放在方法内
}
}
构造方法
是一种特殊的方法。方法名和类名一致,没有返回值部分。
访问修饰符 类名()
{
}
1.没有返回值部分,方法名必须和类名一致。
2.在使用
new
关键字创建对象时,调用对应的构造方法。
3.每个类在定义后,都隐藏有一个无参的构造方法。
4.如果自定义了有参数的构造方法,无参数的构造方法就会失效。如果想要使用无参构造方法,就要再写出来。
5.构造方法通常用于限制创建对象时携带的参数,初始化成员变量。
6.构造方法之间都是重载关系,构造方法不能重写。
7.构造方法执行时,不一定会创建对象。如抽象类中有构造方法,但无法创建抽象类对象,只能在创建抽象类的子类对象时,自动调用抽象类的构造方法。
面向对象三大特性
封装
将类中的属性使用
private
修饰,这样就能防止非当前类对其访问。
封装的步骤:
1.
给类中的所有属性添加
private
访问修饰符 //私有
2.
给每个属性添加
getXXX(),setXXX() 方法用于读取属性值,给属性赋值
继承
类
A extend
类
B
。类
A
就是类
B
的子类,类
A
的对象就能直接访问类
B
中非私有成员。
或接口
A extends
接口
B
。
A继承B B为父 A为子
访问修饰符 类 A extends B
重写Override
子类继承父类后,对父类中的非私有方法进行重写,达到拓展或重做的目的
必须满足方法名、返回值、参数列表都相同
访问权限不能比父类中的方法更严格
不能抛出比父类中的方法更大的异常
重载Overload
总结下来五个字
同名不同参
同名顾名思义方法名相同,不同参则是传进来的数据类型不同,数量不同等;
this和super
都可以当做对象或构造方法使用。
当做对象:
this
表示当前类的对象
,super
表示当前类的父类对象。
this
或
super
当做对象使用时,只能用在非静态方法中。
当做构造方法:
this()
表示当前类的无参数构造方法,如果带参数就表示对应参数的构造方法。
super()
表示当前类的父类的无参数构造方法,如果带参数就表示对应参数的构造方法
this()
或
super()
只能用在另一个构造方法的首行。
在继承关系中,如果父类和子类都没有写出来任何构造方法时,子类有一个隐藏的无参数构造方法,会自动调用父类中无参数的构造方法。
如果父类中有带参数的构造方法,没有无参数的构造方法时,子类必须要调用父类中的构造方法。
Object类
是所有类的父类。任何类都间接地继承了该类,但没有明确地使用
extends
体现出来。所有类都可以访
问
Object类中的方法,或对其进行重写。toString()
就是
Object
类中的一个方法,在输出对象时自动调用。默认输出的是
"
类名
@十六进制哈希码
"
,通常在自定义类中,重写
toString()
,从而输出该类中的属性。
equals()
也是
Object
类中的一个方法,用于比较两个对象是否相同。默认使用
==比较,即比较内存地址,通常需要重写该方法,自定义判断两个对象是否相同时所需的参数。
向上转型
子类对象可以直接使用父类变量保存,即多态。(A为父 B子)
Aclass a1=new Bclass();
向下转型
父类对象可以间接使用子类变量保存,但是需要强制转换(A为父 B子)
Bclass a1=(Bclass)new Aclass();
多态
在继承关系中,子类的对象可以保存到父类的变量中。
多态通常应用于定义方法时,形参为一个父类或接口类型变量,实参可以是子类对象。
无法通过父类变量调用子类独有的方法,如果调用重写了父类的方法时,执行重写后的内容。
访问修饰符
从范围大到小依次是 public 公共的 <----- protected 受保护的 <----- 不写 <----- private 私有的
final
用于修饰属性、方法和类
修饰属性:变量变为常量,不能改变其中的值。
修饰方法:方法成为最终方法,不能重写。
修饰类:类成为最终类,不能被继承。
abstract
用于修饰类和方法,表示抽象的。
修饰方法,方法成为抽象方法,没有方法体,同时该方法的所在类也一定要用
abstract修饰,让其成为抽象类。
抽象方法只能出现在抽象类中,不能出现在普通类中。
抽象类中可以没有抽象方法。
抽象类中有构造方法,但该构造方法只会在
new
抽象类的子类对象时会自动调用,抽象类不能创建
自身对象。
抽象类通常需要被继承,一旦有子类继承了抽象类,就必须要重写抽象类中的所有抽象方法。
interface
用于定义接口的关键字。代替
class。
如果某个抽象类中全都是抽象方法时,可以将这个类改为接口。
接口是一个完全抽象类,其中的方法都是
public abstract
修饰的抽象方法,没有方法体,其中的属
性都是
public final static
修饰的静态常量。
接口中没有构造方法,不能创建对象。
接口通过
implements
实现,实现它的类称为该接口的实现类。
一个类可以同时实现多个接口。
一个类实现了接口后,必须重写其中的抽象方法。
JDK1.8
后,可以在接口中定义
default
方法和
static
方法,该方法不用重写。
static
可以修饰方法、属性或代码块。被修饰的内容称为静态成员。
静态成员在类加载时就会保存到内存中,所以访问静态成员时,无需对象,直接通过类名即可访问。
当某个属性或方法被高度重用时,可以将其定义为静态的,之后通过类名调用。
还可以在类中定义静态代码块
static{}
,在类加载时自动执行的代码块。
静态方法中无法使用非静态成员
普通方法中可以使用静态成员
个人心得
在本周学习JAVA面向对象的过程中,我收获颇多,首先在学习这个阶段的时候我们首先就需要了解到面向对象的三大特征,这很重要封装、继承、多态,在上面的文章中也有提到,这个阶段从名字而来就能了解到什么是最重要的东西,那就是"对象",对象是什么,对象里面有什么,虽然以前学习的代码知识只能说是面向过程,侧重于如何解决这个小问题,而在学习了面向对象后应该学会如何去合理的安排合适的对象去解决这个问题,学会归纳,直接看问题的眼界都不一样了,而在对象中,对象与对象也有许多关系,比如现在大家熟系的什么继承、接口这些等等都是类与类之间的关系,而对象则是类的具体化实例。
我觉得现在这个阶段最重要的就是学会如何去分开解决问题,而不是和以前一样直接全部写在一个类里面,不是说不行,而是费时费力,我们为什么需要去学习这些面向对象,为什么要学习JAVA高级教程,说白了还是大部分人想做的事情,在同一个问题上我们能够用最少的时间,最少的代码来解决这个问题,效率!在这个发展迅速的时代,效率高才是真的高。以上是我对于本次课程JAVA面向对象的一些心得体会。