封装性、继承性和多态性是面向对象编程语言的三大特性
封装:
在Java语言中,对象就是一组变量和方法的封装体。
通过对象的封装,用户不必了解对象是如何实现的,只须通过对象提供的接口与对象进行交互就可以。
封装性实现了模块化和信息隐藏,有利于程序的可移植性和对象的管理。
对象的封装是通过两种方式实现:
(1)通过包实现封装性。在定义类时使用package语句指定类属于哪个包。包是Java语言最大的封装单位,它定义了程序对类的访问权限。
(2)通过类或类的成员的访问权限实现封装性。
继承:
它是一个对象获得另一个对象的属性的过程。
继承之所以重要,是因为它支持层次结构类的概念。
在现实世界中,许多知识都是通过层次结构方式进行管理的。
类的继承是复用类的一种形式。
在类的层次结构中,被继承的类称为父类(parent class)或超类(super class),而继承得到的类称为子类(sub class)或派生类(derived class)。
子类继承父类的状态和行为,同时也可以具有自己的特征。
在Java程序中要实现类的继承,使用extends关键字,格式如下:
[public] class SubClass extends SuperClass{
// 类体定义
}
1.子类继承父类中非private的成员变量和成员方法。
2 省略extends,定义的类继承Object类。
3 Java仅支持单继承。
方法覆盖
在子类中可以定义与父类中的名字、参数列表、返回值类型都相同的方法,这时子类的方法就叫做覆盖(overriding)或重写了父类的方法。
1 子类不能覆盖超类的private方法。
2 父类中static方法可以被继承,但不能被覆盖。
@Override
public String toString(){
return "姓名:" + name +"年龄:" + age ;
}
@Override注解表示其后的方法必须是覆盖父类的一个方法。如果具有该注解的方法没有覆盖父类的方法,编译器将报告一个错误。
子类不能继承父类的构造方法。要创建子类对象,需要使用默认构造方法或为子类定义构造方法。
在子类的构造方法中调用父类的构造方法有两种方式:
(1)使用super来调用父类的构造方法
super([paramlist]);
这里super指直接父类的构造方法,paramlist指调用父类带参数的构造方法。
(2)调用父类的默认构造方法
在子类构造方法中若没有使用super调用父类的构造方法,则编译器在子类的构造方法的第一句自动加上super(),即调用父类无参数的构造方法。
另外,在子类构造方法中也可以使用this调用本类的其他构造方法。不管使用哪种方式调用构造方法,this和super语句必须是构造方法中的第一条语句,并且最多只有一条这样的语句。
不能既调用this,又调用super
多态:
所谓多态,是指一个程序中相同的名字表示不同含义的情况。
子类中定义的与父类中的方法同名的方法,即称为方法覆盖。