面向对象(OOP)
什么是面向对象
面向对象的思想
-
物以类聚,分类的思维模式,思考问题首先思考解决问题需要哪些分类,然后对各类分别思考。
-
面向对象适合处理复杂的问题,适合处理需要多人协作的问题。
面向对象编程的本质:以类的方式组织代码,以对象的组织(封装)数据
三大特性:
-
封装
-
继承
-
多态
类和对象的关系
-
类是一种抽象的模版。
-
对象是类中的一个实例化后的具体实例。
例:类:人 对象:乔峰大侠
构造器
注意:
-
使用new关键字时,本质是在调用构造器。
-
有参构造:一旦定义了一个有参构造,无参构造就必须显示定义。
-
alt + insert 快速生成构造器。
package com.paial.demo01;
public class Student {
String name;
//无参构造方法
//如果没有定义构造方法,系统会自动提供一个无参构造方法
//如果定义了构造方法,系统不会自动提供无参构造方法,需要自行定义
public Student() {
}
//有参构造方法
public Student(String name) {
this.name = name;
}
//没有返回类型,也不能写void
}
封装
属性私有,get/set
追求:高内聚,低耦合
private:私有。
get/set:提供一些可以操作这个属性的方法。
package com.paial.Dame02;
/*
1.提高程序的安全性
2.隐藏代码的实现细节
3.统一接口
4.系统可维护性增强
*/
public class Student {
private String name;
private int age;
//get:获得对象的属性
public String getName(){
return name;
}
//set:设置对象的属性
public void setName(String name){
this.name = name;
}
//alt + insert 快捷键
}
继承
本质:对某一批类的抽象
关键字:extends
相当于父子关系
子类继承了父类就会拥有父类的全部方法(私有的无法被继承)。
ctrl + h:看类之间的关系
注意:一个子类只能有一个父类(一个儿子只有一个父亲,一个父亲可以有多个儿子)
super注意点
-
super调用父类的构造方法,必须在构造方法的第一个
-
super必须只能出现在子类的方法或者构造方法中
-
super和this不能同时调用构造方法!
与this对比:
-
代表的对象不同
-
this:本身调用者的这个对象
-
super:代表父类对象的使用
-
-
前提:
-
this:没有继承可以使用
-
super:只有继承父类后才能使用
-
-
构造方法
-
this():本类的构造
-
super():父类的构造
-
方法的重写
需要有继承关系,子类重写父类的方法!
-
方法名必须相同
-
参数列表必须相同
-
修饰符:范围可以扩大但不能缩小:public>protected>default>private
-
抛出的异常:范围可以缩小但不能扩大:ClassNorFoundException(小) -> Exception(大)
即:子类的方法必须和父类必要一致,方法体不同;
为什么需要重写?
-
父类的功能,子类不一定需要,或者不一定满足!
-
Alt + Insert : override;
package com.paial.Demo03;
public class Person {
public void print(){
System.out.println("Person");
}
}
package com.paial.Demo03;
public class Student extends Person{
//对父类方法的重写
@Override
public void print() {
System.out.println("Student");
}
}
package com.paial.Demo03;
public class Application {
public static void main(String[] args) {
Person p = new Student();
p.print();
}
}