面向对象基本特征
一、封装优点封装可以隐藏事务的细节(提高了安全性)封装可以提高程序中代码的复用性封装的方法使用private关键字来修饰成员变量对需要访问的成员变量,提供对应的getXxx方法,setXxx方法。格式public数据类型get成员变量名(){return成员变量名;}publicvoidset成员变量名(数据类型成员变量名){this。成员变量名成员变量名;}二、继承继承:就是子类继承父类的属性和行为,使得子类对象具有父类相同的属性、相同的行为。子类可以直接访问父类中的非私有的属性和行为。格式class父类{共性的属性共性的行为}class子类extends父类类名{特有的属性特有的行为}特点Java只支持单继承,不支持多继承Java支持多重继承(继承体系)继承后的特点成员变量在继承中子类可以直接使用父类中的非私有的成员变量。成员变量重名时,基于就近原则,优先使用子类的本身的变量,如果在子类中需要使用父类中重名的成员变量时,需要使用super关键字:super。父类成员变量名。子类不能直接继承父类中私有的成员变量,可以间接使用,通过成员的getXxx()和setXxx()方法进行访问。继承后的特点成员方法在继承中子类可以直接调用父类中非私用的成员方法如果子父类中出现了一模一样(返回值类型,方法名,参数列表相同)的方法时,称为方法的重写,此时子类在调用方法的时候,调用的是子类重写之后的方法。子类在重写父类的方法时,访问权限要大于或等于父类方法的访问权限。子类在重写父类方法时,不能修改父类的方法的访问方式(静态或非静态)如果子类中存在一个和父类中私有方法相同的方法时,子类中的方法不是重写父类方法,它属于子类中定义的特有的方法(父类中私有的方法不参与子类方法重写)继承后的特点构造方法
在使用new关键字创建对象的时候,先在堆中给对象分配内存空间,接着给非静态的成员变量进行默认初始化,开始调用对应的构造方法。而在执行构造函数中有隐式的三步:super();调用父类空参数的构造方法。父类成员变量初始化后,才可以给子类使用。非静态成员变量显示赋值构造代码块执行本构造方法中的代码运行继承中构造方法注意事项任何一个类的构造方法中都需要一个隐式的super()语句
任何子类在继承了父类后,都会继承到父类的成员变量,在创建子类对象的时候,会在子类的对象空间中分配空间存储父类的成员变量,而父类的成员变量显示初始化动作必须由父类自己的构造方法来完成。所以在任何类的构造方法中有一个隐式的super()语句,其目的是为了完成父类的成员变量的初始化动作。若一个类的构造方法全部私有,这个类是无法再有子类的,就不存在实例化问题。若一个类没有空参数的构造方法,如果这个类还有其他的构造方法可以被访问,那么这个类就可以有子类。这时要求在子类的构造方法中必须手动的书写super()语句,同时在ssuper(具体的参数),根据指定的参数去调用父类类型相同的构造方法。可以创建这个类的对象new父类名(参数列表)this调用构造方法和super调用父类构造方法不可以共存,因为this和super调用构造方法都必须在构造函数中的第一行this是调用本类其他构造方法对当前这个对象初始化,而super是调用父类构造方法进行初始化,而初始化动作在一个构造方法中只能有一个在一个类中有多个构造方法,之间可以使用this调用,但是不能形成嵌套调用。最后肯定有一个构造方法中是没有this调用的,最后它中必然会有super语句调用父类的构造方法。三、多态多态概述
表示的是一个事物的多种表现形态,同一个事物,以不同的形态表现出来。多态体现的格式父类或接口类型变量名new子类或实现类对象;变量名。方法名();
父类类型:指子类对象继承的父类类型,或者实现的父接口类型。多态的注意事项在使用多态的时候,只能使用父类的类型接受子类的对象,而不能使用子类的类型接受父类的对象。当使用多态方式调用方法时,首先检查父类中是否有该方法,若没有,则编译错误,若有,执行的是子类重写后的方法。多态的弊端只要有多态的地方,一定发生类型的提升在多态的使用中,至始至终只有子类对象,没有父类对象产生。多态中的转型向上转型
多态本身是子类类型向父类类型向上转换的过程。父类类型变量名new子类类型();向下转型
父类类型向子类类型向下转换的过程,强制的。子类类型变量名(子类类型)父类变量名;向下转型判断格式if(父类引用变量名instanceof子类对象所属的类型){子类类型变量名(子类类型)父类引用;}多态中的成员特点总结成员变量是直接使用父类引用操作变量在多态中,使用父类的引用访问成员变量,代码在编译的时期,需要看父类中有没有这个成员变量,如果有编译通过,没有编译失败。多态中,使用父类的引用方法成员变量,编译通过的前提下,若直接使用父类引用操作成员变量,这时操作的依然是父类中的成员变量。成员方法在多态中,使用父类引用调用成员方法的时候,一般方法都有复写方法在使用父类引用调用方法的时候,编译时期要看父类中有没有这个方法,有则编译通过,没有编译失败。运行时,运行子类中复写的方法,若没有复写,则运行父类的方法。