一:多态(用一个小例子)
1.前提:
a.要有继承
b.要有方法的重写
c.要有父类引用指向子类对象
2.多态中成员访问的特点:
a.成员方法(非静态的):编译时看左边(父类),运行时看子类(右边)
b.成员变量:编译时看左边(父类),运行时看左边(父类)
c.静态的成员变量和方法:编译时看左边(父类),运行时看左边(父类)
3.多态的优缺点:
a.优点:可以利用多态作为方法中的形式参数接收本类或者子类对象
b.缺点:不能使用子类特有的方法和属性
c.要想使用子类对象的特有方法必须向下转型,转型时首先要利用instanceOf进行类型判断,防止出现类型转换异常ClassCastException
而且在判断时大类型(父类型)放在下面,子类型放在上面
二:抽象类
1.概念:当描述一类事物时,发现这类事物具有相同的行为,但是该行为对具体的某类事物的实现方式或内容不同时,就将方法定义为抽象方法
(和以前定义方法一样,只不过只有方法的声明,没有方法体{},而且前面加上关键字abstract)例如:在描述Animal这类事物时,发现所有的动物都
具有吃的行为,但是对于具体的某类事物的吃的方式和内容不一样(比如猫吃的方式和东西与狗吃的方式和东西是不同的),所以就在Animal类中
定义一个抽象的吃的方法eat(),该方法只有方法声明,没有具体的实现,实现交给子类去做(实现).
2.抽象类特点
a.抽象类或抽象方法必须用abstract关键字修饰
b.含有抽象方法的类,一定是抽象类
c.但是抽象类中不一定有抽象方法,没有抽象方法的抽象类的主要目的是不让使用者直接创建抽象类对象,必须子类继承抽象类后,创建子类对象
d.抽象类不能实例化,那怎么使用呢?利用多态创建子类对象来使用
e.抽象类的子类可以是抽象类(只是重写了抽象类中的部分抽象方法,或者虽然重写了抽象类的全部抽象方法,但是该子类不允许创建对象,所以定义成抽象类),
也可以是非抽象类(重写了抽象类所有抽象方法,并允许创建该子类对象)
3.抽象类的成员组成
a.可以有成员变量,常量
b.成员变量不能用abstract修饰
c.必须有构造方法:因为子类创建对象时,需要首先让父类初始化
d.抽象方法可以有,也可以没有.抽象方法(强制要求子类要做的事情),非抽象方法(子类继承的事情)
三:接口
1.概念:就是对外提供的一些列的标准或规则,要想使用这套标准和规则,必须实现接口
2.接口的特点:
a.用interface表示
b.子类要实现接口:用implements关键字
c.接口不能直接创建对象:要想创建对象要利用多态,创建接口的实现类对象,而且接口的实现类也可以是抽象的,意义不大
3.接口中的成员特点:
a.接口中不能有变量,只能是常量,而且默认修饰符为public static final
b.接口中只能有抽象方法(默认修饰符为public abstract,所以实现接口时,重写接口中的抽象方法,一定要使用public修饰符),不能有非抽象的成员方法
c.接口中不能有构造方法,因为接口和类是实现的关系,相当于是干爹,如果实现类没有继承其它类,那么在此类上隐藏了一句话(extends Object),也就是说它的直接父类是Object
4.接口和类,类与类,接口与接口之间的关系
a.接口与类:是实现的关系,可以多实现
b.类与类:是继承的关系,只能是但继承,可以多层继承
c.接口与接口:是继承关系,可以是单继承,也可以多继承
5.接口与抽象类的区别
a.所包含成员的区别
b.设计理念的区别:
A.抽象类:是对事物共性行为的描述(比如:动物的吃,睡),是 is a 关系(什么什么是什么什么的一种)
B.接口:是对事物功能的扩展(比如:猫跳高,汽车的自动泊车和无人驾驶功能),是like a 关系(什么什么像是什么什么的一种)
|