黑马程序员——面向对象——多态-抽象类-接口
2015-05-13 22:10
267 查看
------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形式,接口中定义是对象的扩展功能,是对象本来没有的特性,后来有的。
-------
一.多态的概述
是指事物的多种状态
多态的前提
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形式,接口中定义是对象的扩展功能,是对象本来没有的特性,后来有的。
相关文章推荐
- 黑马程序员-17-java基础-面向对象(3)-继承、抽象类、接口与多态
- 黑马程序员--JAVA<面向对象>--构造函数、抽象类、接口、多态
- 黑马程序员-Java的面向对象(抽象类、接口、内部类和继承、组合、多态)
- 黑马程序员—面向对象(static,封装,继承,多态,内部类,抽象类,接口)总结
- 黑马程序员————面向对象(继承,抽象类,接口,多态,异常)
- 黑马程序员——【Java基础】——面向对象(一)概述、类与对象、继承、抽象类、接口、多态、内部类
- 黑马程序员面试题面向对象二(多态,抽象类abstract,接口Interface,内部类,异常Exception,包package,String类,StringBuffer)
- 黑马程序员——Java基础---面向对象(继承、多态、抽象类、接口、内部类)
- 黑马程序员—Java面向对象(抽象类、模板方法设计模式、接口、多态、内部类)
- 黑马程序员 Java面向对象(继承,抽象类,接口,多态,内部类)
- 黑马程序员 Java基础 面向对象:继承、final关键字、抽象类、模版方法模式、接口、多态、Object类
- 黑马程序员_JAVA笔记07——面向对象3(继承、final、抽象类、接口)
- 黑马程序员------面向对象(No.6)(接口、多态)
- 黑马程序员_Java基础_抽象类,模板设计模式,接口,内部类,多态
- 黑马程序员 多态,抽象类与接口
- 黑马程序员_java的面向对象(对第七课继承..抽象类..接口及fianl应用总结)
- 黑马程序员——java基础——继承、抽象类、接口、多态
- JavaSE实战——面向对象(中) 抽象类,接口,多态,内部类,匿名内部类
- (42)抽象类和抽象方法的应用(43)接口与面向对象中多态的应用
- 黑马程序员——面向对象(final关键字、抽象类、模版方法、接口)