面向对象三大特征:
封装
package OOP.Demo04;
//类
public class Student {
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
//名字
private String name;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
//学号
private long id;
public char getSex() {
return sex;
}
public void setSex(char sex) {
this.sex = sex;
}
//性别
private char sex;
//学习()
private void study(){}
//睡觉()
private void sleep(){}
}
//提供一些可以操作这个属性的方法!
//提供一些public的get、set方法
//get 获得这个数据
//set 给这个数据设置值
package OOP.Demo04;
public class Application {
public static void main(String[] args) {
Student s1=new Student();
s1.setName("czf");
System.out.println(s1.getName());
}
}
调用get与set方法改变s1.name
idea中的快捷健 alt+insert可以快速生成get set方法
封装的意义
- 提高程序的安全性,保护数据
- 隐藏代码的实现细节
- 统一接口
- 提高了系统的可维护性
使用get set方法可以有效的规避一些不合法的输入,大大的提高了系统的安全性已经可维护性。图中则通过改写setAge方法,避免了年龄的不合法输入。
继承
图中Student类与Teacher类都是Person类的子类(派生类)。
Tips
在Java中,所有的类,都默认直接或者间接继承object
快捷键CTRL+h 可以显示类的层次结构
子类无法调用父类的protected变量和方法
Super详解
通过代码我们可以看出Person类与student类中都含有protected的变量,如果想要通过Student类来调用父类Person类中的protected变量则需要使用super关键字来进行调用。我们可以看到,我们输出了super.name,而super.name正是protected String name =“chenzifu”;
Super注意点:
1.Super调用父类的构造方法,必须在构造方法的第一个。
2.super 必须只能出现在子类的方法或者构造方法中。
3.super和this 不能同时调用构造方法。
vs this:
代表的对象不同 :
this: 本身调用者这个对象
super: 代表父类对象的引用
前提:
this:没有继承也可以使用
super:只能在继承条件才可以使用
构造方法
this();本类的构造
super();父类的构造
super无法调用父类的私有变量以及私有方法
方法重写
静态方法只能被继承无法被重写
重写
前提:需要有继承关系,子类重写父类的方法!
- 方法名必须相同
- 参数列表必须相同(否则就变成重载了)!
- 修饰符:范围可以扩大但不能缩小:public>protectde>default>private
- 抛出的异常:范围,可以被缩小,但不能扩大; ClassNotFoundException–>Expection(大)
重写,子类的方法和父类必须要一致;方法体不同
重写都是方法的重写,与属性无关
为什么需要重写
- 父类的功能,子类不一定需要,或者不一定满足!
- 快捷键 Alt+Insert 选择override;