1. 面向对象
对象就是我们周边的一切事物,java的面向对象就是将我们周边的事物进行行为,特征的分析总结,通过封装继承和多态来进行类的定义,通过类来产生特定的对象,使用对象来进行特定的处理,通过类和对象进行编程。
2. 基本数据类型和引用数据类型
八种基本数据类型:整形(byte short int long)字符型(char)浮点型(floate double)布尔类型(boolean)
引用类型:引用类型就是我们声明的变量指代的是内存空间地址而非具体的值。所有类定义的变量都是引用类型,数组也是引用类型。
“==”和“equals”的区别
“equals”比较的是对象的内容,即基本数据类型的具体值,引用类型的控件内保存的值。
“==”比较的是变量的值是否相等。即基本数据类型的具体的值,引用类型的变量所指代的内存空间地址值。
3.访问修饰符
访问修饰符就是能够控制访问权限的关键字,访问修饰符有四种:private public default protected
Private 被该访问修饰符修饰的方法和属性或类都是类的私有成员,只能在本类中进行调用。
Public 被该修饰符修饰的方法和属性或类,可以在所有类中被调用。
Default 被该修饰符修饰的方法和属性或类,只能在本类或同包的类中被访问。
Protected 被该修饰符修饰的方法和属性,只能在本类 同包的类中 子类中被访问
4.重载
同一个类中,同名的方法参数不同就是重载,这个过程是方法重载。
重载的实质
同一个类中
方法名相同
参数个数可以不同
参数类型可以不同
5.重写
子类中重写父类的方法,实现就是方法名相同参数相同的方法。
父类与子类之间的多态性,对父类的函数进行重新定义。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写
(Overriding)。
若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数表,则新方法将覆盖原有的方法。
如需父类中原有的方法,可使用super关键字,该关键字引用了当前类的父类。
子类函数的访问修饰权限不能少于父类的;
6.封装
封装是一种编程思想,封装是程序设计中最能够体现程序安全性的概念。
封装就是将类的属性或方法封装到类的内部,不允许在外部任意修改,只能通过类提供的方法进行修改。(例如属性被private修饰,类中添加set和get方法)
好处:
(1)良好的封装能够减少耦合:不直接修改数据则减少数据和外部的关联。
(2)类内部的结构可以自由修改:对于类中的对属性修改的方法我们可以做任意的修改,例如在set时我们可以添加控制,使其不能为一些不合理的值。
public void setData(int data) {
if(data> 120){
System.out.println(data+"is error"); //提示錯誤信息
}else{
This.data = data;
}
(3)可以对成员进行更精确的控制:例如一个类中的int 类型变量在外界多次使用,当我们希望将变量改为String时,我们需要找到每个调用出进行修改,而我们如果使用了封装,则只需要修改set的方法就可以了
public void setData(int data) {
this.age = String.valueOf(data);
}
(4)隐藏信息,实现细节:外部不能直接查看类的信息,只能通过类提供的方法。增加了安全性。
7.继承
多种事物拥有相同的特性,比如飞机和鸟都会飞,我们就可以面向对象的思想定义一个父类,让飞机和鸟继承这个父类,这样飞机和鸟就都有了飞的特性,这就是继承的作用
子类继承父类,则子类就拥有了父类的属性和方法,子类也可以定义自己的方法属性。
继承通过关键字extends实现
Java实现的是单继承,即一个子类只能有一个父类,而一个父类可以有多个子类
构造函数不能被继承,且不能被重写,但我们可以在自己的构造函数中通过super关键字调用父类的构造函数。
创建子类对象时会先执行父类的构造函数,初始化继承自父类的成员,在调用子类的构造函数,初始化子类的成员。
当子类中的属性名称与父类的属性名相同时,子类的访问修饰符的控制权限要比父类的该属性的访问修饰符的访问权限大于或等于。Public 就比private的访问权限大。
8.多态
指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)
既是对于同一个方法名的方法,通过不同的类(两个类的方法名相同,通过这两个类调用同一个方法;两个子类重写了父类的同一个方法,需要父类的对象调用该方法,我们可以使用子类的对象替换父类对象调用该方法但不同子类调用的结果不同。)调用实现的结果不同,对于同一个类中的方法重载实现的不是多态。
多态实现条件
方法名称相同
传入的参数类型或个数不同
里式替换原则:所有引用基类(父类)的地方必须能透明地使用其子类的对象。在软件中将一个基类对象替换成它的子类对象,程序将不会产生任何错误和异常,反过来则不成立,如果一个软件实体使用的是一个子类对象的话,那么它不一定能够使用基类对象。
public static void main(String[] args) {
ShowData(new Student());//里式替换原则
ShowData(new Teacher());//里式替换原则
}
public static void ShowData(People people){
System.out.println(people.getName("小明"));//getname最终打印的结果不同:多态
}
9.接口
接口的声明:使用关键字interface进行修饰,形式和类相似。
1. 接口中的成员变量默认都是public、static、final类型的,必须被显式初始化
2. 接口中的方法默认都是public、abstract类型的。
3. 接口中只能包含public、static、final类型的成员变量和public、abstract类
型的成员方法。
4. 接口没有构造方法,不能被实例化,在接口中定义构造方法是非法的。
5. 一个接口不能实现另一个接口,但它可以继承多个其他接口。
interface C extends
A, B{} // A和B都是接口
6. 当类实现某个接口时,它必须实现接口中所有的抽象方法,否则这个类必须被定义为抽象类。
7. 接口中没有方法体
10.抽象类
抽象就是将拥有共同方法和属性的对象提取出来,重新设计一个更加通用,更加大众化的类,这个类就是抽象类。
具有一个或多个抽象方法的类就是抽象类,抽象类中既可以有抽象方法,也可以有普通方法。抽象类和抽象方法都是被关键字abstract修饰的。
继承抽象类后若没有实现抽象类的所有抽象方法,则子类也是抽象类。
抽象类不能被实例化。
定义抽象类保证了程序的一致性。
抽象和接口的区别:子类只能继承一个抽象类,但可以实现多个接口。几口中不能有实例字段只能有静态变量,抽象类可以有实例字段。接口内的方法自动设置为public,抽象类中必须手动声明访问修饰符。