Java的面向对象
面向对象
从C到Java,认识面向过程 到 面向对象的转变
不再注重所有功能从小到大的完善开发
四大特性
面向对象四大特性:封装、继承、多态、抽象
(也有版本说三大特性,将抽象去掉)
抽象性:将实体的一些共同特性抽取出来,封装在一个新的概念类中
- 类,就是一种抽象
封装性:可以理解为一个黑箱,我们只需要知道他能干什么,而不需要知道他怎么去干的,这样编程思想就是封装
- 方法就是一种封装
private
也是一种封装
继承性:子可以遗传一些父的特性,能减小代码和数据的冗余度,大大增加程序的重用性
- 是多态性的前提
- 子类拥有父亲的非私有成员
- 子类可以拥有自己的方法
- Java的继承是单继承,直接的父类只可以有一个
多态性:多态就是通过传递给父类对象引用不同的子类对象从而表现出不同的行为
implements
实现接口,就是多态的一种体现- 重载、重写都是多态性思想的体现
类
创建一个类的对象
1 | NewClass x = new NewClass(); |
调用子类的变量或者方法:
1 | NewClass x = new NewClass(); |
一个标准的类(Java Bean):
- 所有成员变量都用
private
修饰 - 每一个变量都有
set/get
方法 - 一个无参构造
- 一个有参构造
成员变量和局部变量的区别
- 定义的位置不同:局部变量在方法内部,成员变量在方法的外部,直接在类中
- 作用范围不同:局部变量只能在方法内部使用,出了方法则不能使用,整个类内都可以使用
- 默认值不同:局部变量没有默认值,而成员变量默认会有初始值
- 位置不同:局部变量在栈中,成员变量在堆内存
- 生命周期不同:局部变量入栈建立,出栈消失;成员变量随对象的建立而建立,随其消失而消失
this指针
当方法的局部变量和成员变量重名时,根据就近原则,优先使用局部变量;
如果要访问成员变量,要用this.XXX;
this 其实就是调用者自己本身
作用:
- 重名的情况下起到区分的效果
- 访问本类的内容
- 还可以调用自己的构造方法
构造方法
特点:
- 名称和类名一样
- 无函数类型,无返回值
- 有默认的构造函数(编写了构造函数则无默认的构造函数)
- 可以重载
继承关系中的构造方法:
- 子类构造方法当中,有一个默认隐含的
super()
调用,所以一定是先调用父类构造,再调用子类构造 - 可以通过
super
关键字来调用父类重载构造 super
的父类构造调用,必须是子类构造方法的第一个调用- 只有子类的构造方法才能调用父类构造方法
匿名对象
1 | NewClass x = new NewClass();//普通的创建对象 |
注意: 匿名对象只能使用唯一的一次
使用建议:如果确定有一个对象只需要使用唯一的一次,情况如下
当需要记录一次数据的时候
1
int sum1 = new Scanner(System.in).nextInt();
使用匿名对象传递参数
1
2
3
4
5public static void main(String[] args) {
Method(new Scanner(System.in));
}
public static void Method(Scanner sc) {
}返回匿名参数
1
2
3public static Scanner Method(Scanner sc) {
return new Scanner(System.in);
}合理使用匿名参数,大大简洁代码