黑马程序员---java面向对象 封装, 继承, 多态

来源:互联网 发布:翻墙的原理 知乎 编辑:程序博客网 时间:2024/06/05 10:58
---------------------- android培训、java培训、期待与您交流! ----------------------

面向对象

      封装, 继承, 多态;

              封装: 封装是指隐藏对象的属性和一些实现细节,仅对外提供公共的方法访问;

1.       实现封装的步骤:

<1>修改属性的可见性来限制对属性的访问;

<2>没个属性创建一对赋值方法和取值方法,用于对属性的访问;

<3>将不需要对外提供的方法隐藏;

2.       重点:

为了实现良好的封装性, 通常将类的成员声明为paivate的,再通过public的方法来对这个变量进行访问,对一个变量的操作,一般都要有读取和赋值的操作,分别定义两个方法来实现这两种操作,一个是getXxx()方法, 用来进行读取这个成员变量的操作, 另一个是setXxx()方法, 用来给这个变量的赋值操作.如果外部的程序可以随意修改一个类的成员变量, 这样代码会变的很不安全;

3.       举例:

public class Person {

                  private String name;

                  private int age;

                  public Person(String name, int age) {

                     this.name = name;

                     this.age = age;

                  }

                  public String getName() {

                     return name;

                  }

                  public void setName(String name) {

                     this.name = name;

                  }

                  public int getAge() {

                     return age;

                  }

                  public void setAge(int age) {

                     this.age = age;

                  }

}

   

继承: 在程序中,可以使用extends关键字让一个类继承另外一个类, 继承的类为子类(派生类),被继承的类为父类(超类, 基类), 子类会自动继承父类所有的方法和属性。

1.       为什么要使用继承:

当发现一个类的功能不行,方法不够用时,就可以派生子类,增加方法, 当需要定义一个能实现某项特殊功能的类时,就可以使用继承, 最终还是为了一个目的,提高代码的复用性; 因为如果一个类继承多个类,多个类中有相同的方法,子类调用该方法时就不知道该调用哪一个类中的方法了。

2.       类型转换:

<1>子类可以当做父类来用, 因为父类中有的子类都有, 父类不能当做子类来用, 因为子类特有的功能父类没有.

<2>在子类仿作父类用的时候,这时不能调用子类特有的方法, 如果一定要调用, 需要强制类型转换为子类类型.

<3>在强制类型转换的时候, 可以使用instanceof判断要转换的变量中存储的对象的类型.

3.       覆盖:

<1>子类继承父类的时候,可以继承父类的方法,要求返回值类型,函数名,参数列表都一样,不能定义比父类更低的访问权限.

<2>子类一旦覆盖了父类的方法,那么在通过子类对象调用方法时,找到的就是子类的方法了.

<3>如果需要访问父类被覆盖的方法,那么使用super.方法名形式访问.

4.       子类对象的实例化:

<1>因为在创建子类对象的时候, 要先创建父类对象, 所以在创建子类对象的时候, 一定会执行父类的构造函数.

<2>可以使用”super(参数列表)”来指定使用哪个父类的构造函数创建父类对象, 如果没有指定使用哪个父类的构造函数, 默认会调用无参的构造函数.

<3>super和this类似, 都只能放在构造函数的第一条语句, 构造函数的第一条语句要么是this, 要么是super, 如果没有写, 默认为super.

             

多态: 多态字面上的意思就是多种形态。在面向对象语言中,我们可以将函数的形参定义为一个父类类型,而在真正调用该函数时这个父类类型的所有子类对象都可以传入,根据传入的子类对象不同函数可以运行处多种形态。

1  多态的特点:

应用程序不必为每一个子类编写功能调用,只需要对父类进行处理即可。这一招叫“以不变应万变”,可以大大提高程序的可复用性。子类的功能可以被父类的变量调用,这叫向后兼容,可以提高程序的可扩充性和可维护性。现在写的程序可以调用将来写的程序不足为奇;

2         熟记:

一个类型引用只能引用引用类型自身含有的方法和变量, 父类引用指向子类对象, 最后执行的是子类的方法; 使用父类引用指向子类的时候,其实jvm已经使用了编译器产生的类型信息调整转换, 也可以这样理解,相当于把不是父类中含有的函数从虚拟函数表中设置为不可见的。注意有可能虚拟函数表中有些函数地址由于在子类中已经被改写了,所以对象虚拟函数表中虚拟函数项目地址已经被设置为子类中完成的方法体的地址;

---------------------- android培训、java培训、期待与您交流! ----------------------