目录
一、思想
面向对象是从宏观的角度考虑问题的,面向过程则是细节。比如做饭,从面向对象的角度出发,我们得知道做饭需要买菜,洗菜,做菜……但从面向过程的角度出发,我们需要知道买菜要买什么,买多少;做菜需要什么佐料,量多少……
二、类与对象
- 关系:类是对象的抽象,对象是类的实例。
- 如何声明类:class 类名(){属性;方法}
- 如何创建对象:new 类名()
- get,set方法:获取,设置成员变量
- 构造方法:对成员变量进行初始化
- this指调用它的对象
- 访问修饰符:public、protected、默认的、private
三、关键字
- static
1)意为静态的,用来修饰成员变量,方法,内部类
2)static修饰的变量称为类变量,不需要创建对象,可以用“类名.”的形式直接访问
3)static修饰的变量和方法在一个类中只有一份内存,所有实例共享
4)static修饰的变量在类加载的时候被初始化
5)基本规则
- 在同一个类中,静态方法只能访问静态属性和静态方法,不能访问非静态的
- 如果访问权限允许,可以使用“类名.”的形式访问,也可以使用“实例.”的形式访问
- 静态方法中不存在当前对象,因而不能用this,当然更不能用super
- 不能用static修饰局部变量
- 静态方法不能被非静态方法覆盖
2.this
1)this指向调用它的对象
2)this()可以在构造方法里调用其他的构造方法
3)当成员变量与局部变量命名冲突时,用this.调用成员变量
3.native:指本地方法,也叫JNI,是由C等编写的代码,在java中无法查看其源码
4.final
1)修饰类:final修饰的类不能被继承;不能修饰抽象类和接口
修饰方法:final修饰的方法不能被重写;不能修饰抽象方法
修饰属性:final修饰的属性不能被二次赋值;修饰引用类型时,比如数组,地址不能改,既指向不能改,但数组中的元素可以改变
四、特征
1.封装:隐藏代码的实现,对外提供一个接口
(1)优点:增加软件代码的内聚性,提高可重用性和可维护性
2.继承:子类继承父类开放权限的所有代码
(1)单根继承:java中是单继承,但可以连续继承
(2) 语法:public class A extends B A继承B中开放权限的所有代码
(3)一个类的构造方法调用父类的构造方法必须在第一行写上super()
3.多态:不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态
(1) Employee e = new Employee();
Employee e = new Manager();
4.抽象:避免考虑一些与目标无关的细节
(1)抽象方法:用abstract修饰的方法,没有具体的方法实现,只有方法签名,例如:public abstract void a();
(2)抽象类:用abstract修饰的类,抽象类最终必须得有一个具体类来实现,抽象类不能new对象
注:有抽象方法的类一定是抽象类,但抽象类不一定有抽象方法,抽象类中可以有非抽象方法
五、重载与重写
1.重载是指在同一个类中,方法名相同,参数列表不同(参数的类型与个数)
2.重写是指子类方法名相同,参数列表也相同,只是方法逻辑题不同。一般是子类重写父类的方法,要在子类的方法前加注解@override
限制条件:
(1)重写的访问修饰符一定要大于等于原来的
(2)参数列表的顺序和类型必须一致,参数名可变
(3)返回值类型可变,但只针对于父子类,比如:
public Father a(Father f){
System.out.println("aaaaa");
return f;
}
@Override
public Son a(Father f){
System.out.println("bbbbbb");
Son s=(Son)f;
return s;
}
(4)不能对私有方法进行重写
六、引用类型转换
1.自动转换(向上转型):小往大转;子类会自动转为父类,但会隐藏掉子类额外拓展的属性和方法
2.强制转换(向下转型):大往小转;父类被强制转为子类,把隐藏掉的部分释放出来
Father f=new Son(15,"张三","初中");
//会隐藏子类中额外拓展的属性,getEdubg()是子类拓展的
System.out.println(((Son)f).getEdubg());
Son son=(Son)new Father();
//释放子类中额外扩展的属性
son.getEdubg();
七、接口
1.接口是比抽象类还抽象的一种东西,接口不提供任何实现,接口中的所有方法都是抽象方法。
2.区别
(1) 普通类:具体实现
(2) 抽象类:具体实现,规范(抽象方法)
(3) 接口:规范!
3.规定
(1) 接口的访问修饰符只能是public或默认的
(2) 接口没有构造方法
(3) 接口中的属性只能是常量,用public static final 修饰,其可以省略
(4) 接口中的方法只能用public abstract修饰,并且不写省略
(5) 一个类要实现接口中的所有方法,一个类可以实现多个接口
4.面向接口编程
优点:降低程序模块间的耦合性,提高整个系统的可扩展性和和可维护性。