一、面向对象特性
1.封装:
封装给对象提供了隐藏内部特性和行为的能力。外部无法直接访问这些封装了的数据,从而保证了这些数据的正确性。同时,对象提供一些能够被其他对象访问的方法来改变它内部的数据。在java当中,有3种修饰符:public,private,protected。每一种修饰符给其他的位于同一个包或不同包下面对象赋予不同的访问权限。(简单理解就是将内部特性和行为隐藏起来,私有化,外部无法直接访问)
2.重写&重载
重写:函数名、参数、返回类型不能变,只能改变函数体实现方式
重载:函数名相同,参数不同,返回类型可以不同
3.多态:
指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)
- 实现多态的技术称为:动态绑定(dynamic binding),是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。
- 多态的作用:消除类型之间的耦合关系。
下面是多态存在的三个必要条件,要求大家做梦时都能背出来!
- 多态存在的三个必要条件
1. 要有继承;
2. 要有重写;
3. 父类引用指向子类对象。
4.继承:子类继承父类的非static属性和方法,可以重写父类方法
5.抽象类:
- 抽象类不能被实例化(初学者很容易犯的错),如果被实例化,就会报错,编译无法通过。只有抽象类的非抽象子类可以创建对象
- 抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类。
- 抽象类中的抽象方法只是声明,不包含方法体,就是不给出方法的具体实现也就是方法的具体功能。、
- 构造方法,类方法(用static修饰的方法)不能声明为抽象方法。
- 抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类。
6.接口:接口的抽象程度>抽象类,但接口并不是类,编写接口的方式与类相似,通过interface实现
- 接口的特性:
1.接口不可被实例化
2.接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为
public abstract
3.接口中可以含有变量,但是接口中的变量会被隐式的指定为
public static final变量
4.
接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法,否则该类必须声明为抽象类
5.一个类可以实现多个接口
6.接口可以多继承
7.接口和抽象类的对比:
- 抽象类和接口的共同点:
1.抽象类不可以被实例化,接口也不可以;
2.抽象类和接口中,都可以包含多个抽象方法;
3.
抽象类和
接口中的抽象方法不能包含方法具体实现
- 抽象类和接口的区别
1. 抽象类中的方法可以包含抽象方法和非抽象方法,而接口中只包含抽象方法。
2. 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是 public static final 类型的。
3. 接口中不能含有静态代码块以及静态方法(用 static 修饰的方法),而抽象类是可以有静态代码块和静态方法。
4. 一个类只能继承一个抽象类,而一个类却可以实现多个接口。
5.接口可以多继承,抽象类只能单继承
二、修饰符
1.访问修饰符
- public: 对所有类可见。使用对象:类、接口、变量、方法
- private: 在同一类内可见。使用对象:变量、方法。 注意:不能修饰类(外部类)
- protected: 对同一包内的类和所有子类可见。使用对象:变量、方法。 注意:不能修饰类(外部类)
- default (即缺省,什么也不写): 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。
2.非访问修饰符
- static: 用来修饰类方法和类变量。静态存储区域,固定区域
1.静态变量:独立于类对象的静态变量,为类所有,故也称为类变量,通过类名访问。
无论一个类实例化多少对象,它的静态变量只有一份拷贝。局部变量不能被声明为 static 变量。
2.静态方法:独立于类对象的静态方法,为类所有,故也称为类方法,通过类名访问。
静态方法不能使用类的非静态变量。
- final: 用来修饰类、方法和变量。
1.final 修饰的类不能够被继承;
2.final 修饰的方法不能被继承类重新定义;
3.final 修饰的变量为常量,是不可修改的。