面向对象(封装、继承、super关键字、多态)
封装
什么是封装?
通俗地理解为私有的属性,公开的方法。
举例来说明,定义一个人的类,我们给这个类两个属性,一个年龄age,一个姓名name。如果设定为public 属性,谁都可以去修改age和name的值,有个人给自己定义1000000岁也或者 负100岁可以,但是这不符合实际。所以不能让别人太轻易地去随意修改我的属性,所以将属性定义为私有private,通过符合实际的方法去修改。
在java中,封装的主体是类,封装对类提供保护,使类的属性和方法在外部不能随意访问,只能通过类对外提供的接口访问。提高程序安全性,隐藏实现细节。
public class Node{ //通过类形式定义链表
private int data; //将data定义为私有的
private Node next = null;
Node(int data){
this.data = data;
}
int getData(){
return this.data;
}
void setData(int data){
this.data = data;
}
}
new一个对象,因为data,next被类所私有化,所以“对象名.data”和“对象名.next”都不能访问到类的成员变量,只能通过类向外提供的public方法,才能获得和修改data的值。
继承
当多个类存在相同属性和行为时,你还在为一个一个重复地写相同属性和行为苦恼,继承出现了。他帮助你盛夏写相同属性和行为的步骤。将相同的属性和方法写到一个类中,其他类去继承他, 可以获得这个类的所有除私有的属性和方法。这个被继承的类叫父类或者超类,被继承的叫子类。
继承使用extends关键字。java支持单继承,不支持多继承。
public class Animal{
public void eat(){ //动物都会吃
};
public void sleep(){ //动物都会睡觉
}
}
public class Person extends Animal{ //继承动物的属性,会吃会睡觉
String name; //人有名字
int age;// 有年龄
}
public class Worker extends Person{ // 继承人的属性,有名字有年龄
String company; // 工作人员有公司
public void work(){ //会工作。
}
}
访问修饰符
访问修饰符是用来控制其他类对该类的类、实例变量、构造方法、实例方法的访问权限。Java的访问权限有4种:public 公开的
protected 受保护的。
默认的,没有任何关键字来表示
private 私有的
修饰符 | 当前类 | 同包的类 | 同包的子类 | 异包 | 异包的子类 |
public | √ | √ | √ | √ | √ |
protected | √ | √ | √ | × | × |
默认的 | √ | √ | √ | × | × |
private | √ | × | × | × | × |
super 关键字
super 和 this 关键字类似,都代表对象,但所表示的对象是不同的。this代表本类对象的引用,super代表父类对象的引用。super仅仅是能引用父类的属性,创建子类对象时不会创建父类对象。
多态
理解这三点:
- 父类引用指向子类对象
- 子类中重写父类方法
- 父类引用调用子类重写方法
1、父类引用指向子类对象
比如 Father f = new child()
该引用既可以处理父类Father对象,也可以处理子类Child对象,当相同的消息发送给子类或者父类对象时,该对象就会根据自己所属的引用而执行不同的行为
2、子类中重写父类方法
比如父类中有个拿巴掌打孩子屁股的方法p(),子类继承了父类的方法,但是子类更狠,拿皮带打,这时子类中的p()被定义为拿皮带打。当是父类对象时,调用的p()就是拿巴掌打,子类对象时,调用的就是拿皮带打。这就重写父类方法。
3、父类引用调用子类重写方法