Java 中面向对象的三大特征
封装
通常应禁止直接访问一个对象中数据的实际表示,而应通过操作接口来访问,这称为信息的隐藏。
属性私有:get/set
封装的意义:
- 提高程序的安全性,保护数据。
- 隐藏代码的实现细节
- 统一接口
- 增加系统的可维护性
举例:
public class Student{
private String name;//名字
private int id;//学号
private char sex;//性别
//提供一些可以操作这个属性的方法!
//提供一些public的get,set方法
//get 获得这个数据
public String getName(){
return this.name;
}
//set给这个数据设置值
public void setName(String name){
this.name=name;
}
以上代码在主方法中需要用方法名.setName给名字赋值,用getName()获得值并输出。
继承
- 继承的本质是对某一批类的抽象,从而实现对现实世界更好的建模。
- extends的意思是"扩展"。子类是父类的扩展。
- Java中类只有单继承,没有多继承!(一个子类只能有一个父类,但是一个父类可以有多个子类)
- 继承是类与类之间的一种关系。
- 继承关系的两个类一个是父类(基类),一个是子类(派生类)。子类继承父类,使用关键字extends来表示。
- 在Java中所有的类都默认直接或者间接继承Object类
//public公共的
//protected受保护的
//default默认的
//private私人的(私有的东西无法被继承)
//子类继承了父类,就会拥有父类的全部方法。
public class Person{
}//父类
public class Student extends Person{
}//子类
super
注意:
1. super调用父类的构造方法,必须在构造方法的第一个。
2. super必须只能出现在子类的方法或者构造方法中。
3. super和this不能同时调用构造方法。
super和this的区别:
1.代表的对象不同:
this:本身调用者这个对象。
super:代表父类对象的引用
2.使用他们的前提不同:
this:没有继承也可以使用。
super:只能在继承条件下才可以使用 。
3.调用的构造方法不同:
this():调用的是本类的构造。
super():调用的是父类的构造。
方法重写
-重写和属性无关,都是方法的重写。
-继承关系,子类重写父类的方法。
重写的特点:
- 方法名必须相同。
- 参数列表必须相同。
- 修饰符:范围可以扩大:public>protected>default>private
- 抛出的异常:可以被缩小,但不能扩大:ClassNotFoundException–>Exception(大)
总结:子类的方法和父类必须要一致,只是方法体不同。
为什么需要重写:
父类的功能,子类不一定需要,或者不一定满足。
多态
- 同一个方法可以根据发送对象的不同而采用多种不同的行为方式。
- 一个对象的实际类型是确定的,但是可以指向对象的引用类型有很多。
多态存在的条件:
-有继承关系
-子类重写父类的方法
-父类引用指向子类对象
多态的特点:
- 多态是方法的多态,属性没有多态。
- 父类和子类是有联系的。(否则会报类型转换异常)
- 多态的条件:1.要有继承关系 2.方法需要重写3.父类引用指向子类对象