系列文章目录
前言
面向对象编程有三大特征: 封装、 继承和多态。
一、封装
封装(encapsulation)就是把抽象出的数据【属性】和对数据的操作【方法】封装在一起,数据被保护在内部,程序的其他部分只有通过被授权的操作【方法】,才能对数据进行操作。
封装的好处 隐藏实现细节:方法(链接数据库)<–调用(传入参数) 可以对数据进行验证,保证安全合理
实现封装的三个步骤 属性私有化private 提供一个公共的(public)set方法,用于对属性判断并赋值 提供一个公共的(public)get方法,用于获取属性的值
二、继承
继承可以解决代码复用,让我们的编程更加靠近人类思维.当多个类存在相同的属性(变量)和方法时,可以从这些类中抽象出父类,在父类中定义这些相同的属性和方法, 所有的子类不需要重新定义这些属性和方法, 只需要通过 extends 来声明继承父类即可。
class 子类 extends 父类
{ }
继承的好处 代码的复用性提高了 代码的扩展性和维护性提高了
继承的使用细则 子类会自动拥有父类定义的属性和方法 子类又叫派生类,父类又叫超类、基类 子类必须调用父类的构造器, 完成父类的初始化 不能滥用继承, 子类和父类之间必须满足 is-a 的逻辑关系 java 所有类都是 Object 类的子类, Object 是所有类的基类 父类构造器的调用不限于直接父类! 将一直往上追溯直到 Object 类(顶级父类) 子类最多只能继承一个父类(指直接继承), 即 java 中是单继承机制 super 在使用时, 必须放在构造器第一行(super 只能在构造器中使用) super() 和 this() 都只能放在构造器第一行, 因此这两个方法不能共存在一个构造器 如果希望指定去调用父类的某个构造器, 则显式的调用一下 : super(参数列表) 子类继承了所有的属性和方法, 非私有的属性和方法可以在子类直接访问, 但是私有属性和方法不能在子类直接访问, 要通过父类提供公共的方法去访问 当创建子类对象时, 不管使用子类的哪个构造器, 默认情况下总会去调用父类的无参构造器, 如果父类没有提供无参构造器, 则必须在子类的构造器中用 super 去指定使用父类的哪个构造器完成对父类的初始化工作, 否则, 编译不会通过
继承的本质 先加载父类信息和父类属性 首先看本类是否有该属性或方法,如果本类没有就看父类有没有,直到Object 找到了但不能访问或找不到就报错,如此反复循环寻找
package com. hspedu. extend_ ;
public class ExtendsTheory {
public static void main ( String [ ] args) {
Son son = new Son ( ) ;
System . out. println ( son. name) ;
System . out. println ( son. hobby) ;
}
}
class GrandPa {
String name = "大头爷爷" ;
String hobby = "旅游" ;
}
class Father extends GrandPa {
String name = "大头爸爸" ;
private int age = 39 ;
public int getAge ( ) {
return age;
}
}
class Son extends Father {
String name = "大头儿子" ;
}
三、多态
总结
封装、 继承和多态每一个特征都很重要。