面向对象的三大特征:封装、继承、多态
⑦封装(private、default、protected、public)
1.使用访问控制符讲重要属性隐藏在对象内部不被直接访问这一过程叫做封装。
封装可以隐藏累的实现细节;让使用者只能通过预定方法访问数据,限制对属性的不合理访问;可进行数据检查保证对象信息的完整性;便于修改提高代码可维护性。
1.使用访问控制符讲重要属性隐藏在对象内部不被直接访问这一过程叫做封装。
封装可以隐藏累的实现细节;让使用者只能通过预定方法访问数据,限制对属性的不合理访问;可进行数据检查保证对象信息的完整性;便于修改提高代码可维护性。
2.用法:
在一个类中将要封装的属性使用private修饰,再给封装的属性添加setXxx(),getXxx()方法。这样其他的类就无法直接访问People类的属性,要访问只能通过setXxx()和getXxx()方法。且使用封装后构造方法this.xx=xx;应写成set、Xx(xx);(规范标识符的命名)。
在一个类中将要封装的属性使用private修饰,再给封装的属性添加setXxx(),getXxx()方法。这样其他的类就无法直接访问People类的属性,要访问只能通过setXxx()和getXxx()方法。且使用封装后构造方法this.xx=xx;应写成set、Xx(xx);(规范标识符的命名)。
⑧继承(extends)
1.父类:被继承的类称为父类。
子类:继承父类的类就是子类。
父类子类是相对的
子类:继承父类的类就是子类。
父类子类是相对的
2.优点:在继承中,子类将获得父类的属性和方法,子类也可以定义自己的属性和方法。进而简化代码。Java中不允许多继承,但支持多重继承。
3.语法(关键字extends):
[访问控制符] class 子类 extends 父类{
属性;
方法;
}
3.语法(关键字extends):
[访问控制符] class 子类 extends 父类{
属性;
方法;
}
4.在继承中当父类的方法不能满足子类需求,在子类中重写父类的这个方法叫做方法重写/覆盖/覆写。方法重写时,子类的访问控制符不能比父类严格,所以父类中使用了private修饰符,在子类中就不叫重写。
5.super关键字:更直接的调用父类方法
super关键字不能在静态方法中使用
在继承中,调用子类的构造方法创建对象时,必定会首先调用父类的构造方法,如果没有在子类的构造方法中使用super显示调用父类的构造方法,则系统会默认调用父类中参数列表为空的构造方法(如果父类没有参数列表为空的构造方法则会报错);如果子类的构造方法中使用类super实现调用父类的构造方法则系统不再默认调用。
在继承中,调用子类的构造方法创建对象时,必定会首先调用父类的构造方法,如果没有在子类的构造方法中使用super显示调用父类的构造方法,则系统会默认调用父类中参数列表为空的构造方法(如果父类没有参数列表为空的构造方法则会报错);如果子类的构造方法中使用类super实现调用父类的构造方法则系统不再默认调用。
6.final关键字:修饰的变量是常量
final修饰的方法不可以被重写、继承
final修饰的方法不可以被重写、继承
⑨多态:编译时类型和运行时类型不一致就是多态
1.1多态分为2种:
★ 方法的重载与重写(覆写/覆盖)
●静态多态(编译时多态):方法重载
●动态多态(运行时多态):方法重写
1.1多态分为2种:
★ 方法的重载与重写(覆写/覆盖)
●静态多态(编译时多态):方法重载
●动态多态(运行时多态):方法重写
1.2★对象的多态
●向上转型:子类对象-----》父类对象 格式: 父类 父类对象 = 子类对象
●向下转型:父类对象-----》子类对象 格式: 子类 子类对象 = (子类)父类对象
●向上转型:子类对象-----》父类对象 格式: 父类 父类对象 = 子类对象
●向下转型:父类对象-----》子类对象 格式: 子类 子类对象 = (子类)父类对象
2.1区别方法的重载和重写
重载重写对比
| 位置 | 方法名 | 参数列表 | 返回值 | 访问控制符 |
重载 | 同一类中 | 一样 | 不一样 | 无关 | 无关 |
重写 | 父类和子类 | 一样 | 一样 | 一样 | 子类不能比父类严格 |
Object类是所有类的基类,一个类如果没有显示继承其他类,则默认继承Object。重写Object类中的toString()和equals()就是很经典的方法重写,很多类中都对Object类中的这两个方法进行了重写。例如String类中。
2.2对象多态
发生对象向上转型,调用方法时,如果子类重写了该方法,则调用的是子类重写后的方法;如果子类没有重写该方法,才调用自己的。
子类是一个特殊的父类,因此java中允许将一个子类对象直接赋给一个父类对象,可以自动完成向上转型,编译时是父类,运行时依旧是子类的特征。Java中也可以向下转型,但是向下转型前必须完成一次向上转型。
发生对象向上转型,调用方法时,如果子类重写了该方法,则调用的是子类重写后的方法;如果子类没有重写该方法,才调用自己的。
子类是一个特殊的父类,因此java中允许将一个子类对象直接赋给一个父类对象,可以自动完成向上转型,编译时是父类,运行时依旧是子类的特征。Java中也可以向下转型,但是向下转型前必须完成一次向上转型。