自己总结了一些在学习面对对象的知识点。
Java面向对象又称:面向对象程序设计(Object Oriented Programming)。其中类是面向对象程序设计中实现信息封装的基础,同时类也是一种用户定义的引用数据类型,也称为类类型。
面向过程(POP)在于把所有事情按步骤执行,注重执行的细节,而面向对象(OOP)是将所有事情在需要的时候,让其对应的对象去执行。面向对象更注重创建解决问题的对象。
类Class:是一系列拥有相同属性和行为的对象集合,同时也是对象的模板。
[修饰符] class 类{
//属性, 定义变量
//例如: int num = 1;//行为,定义方法
//public void fun(){
System.out.println("Hello!");
}
}
创建对象:类名 对象名 = new 构造方法( [参数] )
同时在类和方法中都会涉及到: 成员变量、局部变量、静态常量。
成员变量:定义在类中的变量,使用范围也在该类中,也称为这个类的属性,它有默认值,在对象创建的时候创建,通过对象访问。
整形 | 默认值 |
整形 | 0 |
浮点型 | 0.0 |
布尔型 | false |
字符型 | 空字符 \u0000 |
引用类型 | null |
局部变量:定义在方法之中,同时使用范围也在该方法当中。这里需要注意的是,局部变量是没有默认值的,所以需要在赋值后才能使用,并且在方法调用的时候创建。
静态常量:特殊的成员变量,使用范围在该类中,用static和final修饰,它通常需要在定义时赋值,在类加载时创建,通过类名方法。
class Person{
//成员变量
String name; //默认值unll
void fun(){
//局部变量,需要赋值才能使用
int num = 10;
System.out.println("num的值为:"+num)
}
}
构造方法:是一种特殊的方法,方法名和类名相同,并且没有返回值。
[访问修饰符] 类名(){
}
1、在使用new关键字创建对象的时候,就已经自动调用对应的构造方法了,并且在每一个类定义之后,都隐藏了一个默认的无参数的构造方法。
2、如果自己写了一个构造方法之后,那么默认的隐藏的无参数的构造方法就会失效。
3、构造方法通常都会初始化成员变量。
4、对于构造方法来说,都是重载的关系,因为构造方法不能重写。
5、构造方法执行的时候,不一定会创建对象。(如抽象类中的构造方法,该构造方法只在创建其子类对象的时候自动调用)
面向对象的三大特性:封装、继承、多态、
封装:使用private将类中的属性修饰后,就不允许非当前类进行访问,由此来达到保护核心代码的目的。
继承:类A extends 类B 类A就是类B的子类 ,同时类A也能直接使用类B中的非私有成员。
多态:在继承当中,子类的对象,可以保存到父类的变量中去。等到再调用方法的时候,调用的就是子类重写过的方法。
this和super:都可以当作对象或者构造方法来使用。
this用来表示当前类的对象,super表示当前类的父类对象。需要注意的地方是,this和super都只能用在非静态的方法中。
final:用于修饰属性、方法和类
修饰属性:变量为常量,不能改变其值。
修饰方法:方法不能被重写。
修饰类:类不能被继承。
abstract:用于修饰类和方法,表示抽象的。
修饰方法:该方法称为抽象方法,没有方法体,同时该方法所在类一定也要使用abstract修饰成为抽象类。
1、抽象方法只能出现在抽象类中,不能出现在普通类中。
2、抽象类中可以没有抽象方法
3、抽象类中有构造方法,但该构造方法不能使用new调用,所以抽象类不能创建对象
4、抽象类中的构造方法,在创建其子类对象时自动调用
5、抽象类通常需要被继承,继承后子类一定要重写抽象类中的所有抽象方
interface:用于定义接口的关键字,代替原来的class,如果某一个抽象类中,全是抽象方法时,可以将该抽象类定义为一个接口。
接口是一个完全抽象类。其中的方法都是公共的public抽象abstract方法,其中的属性都是公共的public 静态static常量final。在jdk1.8后,接口中可以定义默认default方法和静态static方法。
1、接口中的方法都是被public abastract修饰,可以不用写出来
2、接口中的属性都是被public static final修饰,可以不用写出来
3、jdk1.8后,可以在接口中定义default方法和static方法
4、接口通常需要一个类去实现,该类使用implements关键字实现接口。
5、实现了接口的实现类,要重写其中所有抽象方法
6、接口没有构造方法,不能实例化对象
static:可以修饰方法和属性,表示该方法或属性是静态的,在类加载时保存到内存中,无需对象参数,直接通过类名就能访问。
如果某个属性或方法被高度重用时,可以将其定义为静态的,之后直接通过类名调用。
还可以在类中定义静态代码块static{}。在类加载时自动执行的代码块。
以上就本人在学习过程中的所理解掌握的知识,如有不足的地方,希望大家能够指出。