面向对象
一、抽象类
抽象类必须使用abstract class声明
一个抽象类中可以没有抽象方法。抽象方法必须写在抽象类或者接口中。
1、抽象方法
只声明而未实现的方法称为抽象方法(未实现指的是:没有“{}”方法体),抽象方法必须使用abstract关键字声明。
2、不能被实例化
在抽象类的使用中有几个原则:
抽象类本身是不能直接进行实例化操作的,即:不能直接使用关键字new完成。 不能被我们创建,但是jvm虚拟器可以创建。
一个抽象类必须被子类所继承,被继承的子类(如果不是抽象类)则必须覆写(重写)抽象类中的全部抽象方法。
3、常见问题
1、抽象类能否用final声明?
不能,因为final属修饰的类是不能有子类的 , 而抽象类必须有子类才有意义,所以不能。
2、 抽象类能否有构造方法?
能有构造方法,而且子类对象实例化的时候的流程与普通类的继承是一样的,都是要先调用父类中的构造方法(默认是无参的)。
4、抽象类和普通类的区别
1、抽象类必须用public或protected修饰(如果为private修饰,那么子类则无法继承,也就无法实现其抽象方法)。 默认缺省为 public ;
2、抽象类不可以使用new关键字创建对象, 但是在子类创建对象时, 抽象父类也会被JVM实例化 ;
3、如果一个子类继承抽象类,那么必须实现其所有的抽象方法。如果有未实现的抽象方法,那么子类也必须定义为 abstract类 ;
二、接口
如果一个类中的全部方法都是抽象方法,全部属性都是全局常量,那么此时就可以将这个类定义成一个接口。
1、接口的继承 extends 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。
继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实力域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
继承的限制:Java中只有单继承,多重继承,没有多继承(即一个子类只能有一个父类)。多重继承通俗来讲就是爷爷、爸爸、孙子。
接口因为都是抽象部分, 不存在具体的实现, 所以允许多继承
三、多态
就是对象的多种表现形式,(多种体现形态)
对象的多态性,从概念上非常好理解,在类中有子类和父类之分,子类就是父类的一种形态 ,对象多态性就从此而来。
ps: 方法的重载 和 重写 也是多态的一种, 不过是方法的多态(相同方法名的多种形态)。
重载:?一个类中方法的多态性体现 。
重写:?子父类中方法的多态性体现。
重载(Overload)
方法的重载
方法名称相同, 参数类型或参数长度不同或顺序不同, 可以完成方法的重载 ;
方法的重载与返回值无关;
方法的重载 ,可以让我们在不同的需求下, 通过传递不同的参数调用方法来完成具体的功能
构造方法的重载
一个类, 可以存在多个构造方法 ;
参数列表的长度或类型不同即可完成构造方法的重载 ;
构造方法的重载 ,可以让我们在不同的创建对象的需求下, 调用不同的方法来完成对象的初始化 ;
重写(Override)
1、参数列表必须完全与被重写的方法相同; 2、返回类型必须完全与被重写的返回类型相同; 3、访问权限不能比父类被重写的方法的访问权限更低。例如父类方法为public,子类就不能为protected; 4、父类的成员方法只能被它的子类继承; 5、声明为static和private的方法不能被重写,但是能够被再次声明;
重写与重载的区别
|