黑马程序员——面向对象——多态-抽象类-接口

来源:互联网 发布:淘宝客优惠券推广 编辑:程序博客网 时间:2024/06/07 05:22

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

一.多态的概述

是指事物的多种状态


多态的前提
1.必须有继承或实现关系
2.必须有方法重写
3.有父类引用指向子类对象


二.多态的的运行特点


1.成员变量
编译看左边,运行看左边

2.成员方法
编译看左边,运行看右边

3.静态方法
编译看左边,运行看左边


三.多态的转型
向上转型
父类 f =new 子类();


向下转型

子类 z =(子类)f;

                    

练习题:


答案为:

B

C

我们来分析一下:

首先我们看题目先从测试类看起,A a =new B(); a.show();

父类A中有show方法,而子类B中没有,但是子类B继承了show方法,根据编译看左边,运行看右边

因此执行的是子类B中继承的show方法,show方法又调用了show2,直接运行子类B的show2方法,然

后打印出B,然后换行。

而后看 B b = new C(); b.show();子类C中有show方法,直接执行,子类show方法里面是

super.show()因此跳到父类B中show方法,但是show方法执行的是show2方法而子类C中重写了。

最后执行了子类C的show2方法,打印出C结束。



四.多态的好处与弊端


好处
1.提高了代码的维护性(继承保证)
2.提高了代码的扩展性(多态保证)
在父类作为形式参数传递的时候可以将子类作为实际参数传递,从而
体现出多态的的特征,从而体现出扩展性。

弊端
多态不能使用子类的特有的属性与功能


五.抽象类的概述


抽象指的是不能被描述的

抽象类的特点
a:
被abstract修饰
方法 abstract 方法名();
类   abstract 类名{}
b:
抽象类不一定有抽象方法,但是有抽象方法的类一定是抽象类或接口
c:
抽象类不能被实例化,一般通过他的子类进行实例化,说明这是多态的一种,叫做抽象类多态
d:
抽象类的子类要么是抽象类,要么是具体类,不过具体类必须全部重写抽象类的抽象方法。


注意:抽象类不能被实例化,因为实例化后调用抽象方法没有意义
 抽象类中的抽象方法会强制子类对所有抽象方法重写


六.抽象类的成员特点


成员变量
既可以是变量,也可以是常量

构造方法
有构造方法,用于子类访问父类数据的初始化

成员方法
a:抽象方法(强制要求子类对抽象方法重写)
b:具体方法(子类继承父类方法提高代码复用性)

简答题:
一个类如果没有抽象方法,可不可以定义为抽象类?如果可以,有什么意义?

一个类没有抽象方法,可以被定义为抽象类,意义是不让创建对象来访问它
可以通过类名直接调用。


七.abstract关键字不能与哪些关键字共存,为什么?

1.private 
private修饰的方法不能被子类访问,与抽象类子类重写父类的特点相违背。

2.static  
static修饰的方法是被类调用的,属于该类,通过abstract修饰没有意义。

3.final   
final修饰的方法为最终方法不能被修改,与抽象类子类重写父类的特点相违背。


八.接口的概述


接口就是本来没有的功能,后来有了,但是又不是全部对象都有的功能
我们又不能通过改变整个类来实现这个功能。
因此我们提供接口来是部分对象实现这个功能,这就是接口。




九.接口的成员特点
1.成员变量
只能是常量
系统默认添加修饰符 public static final 表示静态的公共的。
2.构造方法
接口没有构造方法
3.成员方法
只能是抽象方法
默认修饰符 public abstract 




十.类与接口之间的关系

1.类与类的关系:
类与类之间是继承关系。只能单继承,不过可以多层继承。

2.接口与类的关系:
类与接口之间是实现关系。既可以单实现,也可以多实现。
也可以在继承一个类的同时实现多个接口。

3.接口与接口的关系:
接口与接口之间是继承关系。既可以单继承,也可以多继承。

十一.接口与抽象类的区别


1.成员区别
A:抽象类
成员变量:可以是变量,也可以是常量
成员方法:可以是抽象的,也可以是非抽象的
构造方法:有构造方法
B:接口
成员变量:只能是常量
成员方法:只能是抽象方法
构造方法:没有

2.关系区别:
类与类:
继承关系,单继承,多层继承
类与接口:
实现关系,可以单实现也可以多实现
接口与接口:
继承关系,可以单继承,也可以是多继承

3.设计理念不同
抽象类:
是is a形式,在抽象类中定义的是对象的共性功能。
接口:
是like a形式,接口中定义是对象的扩展功能,是对象本来没有的特性,后来有的。







0 0