Java学习笔记之多态
Hello,world
你好! 这是我的第一篇文章,主要内容是Java的学习笔记,其中包括上课时做的笔记和网上摘抄的一些精彩内容。初学Java,错误的地方,请大佬指正。
多态
我于之前没想过要写文章,笔记也没怎么做,当我有笔记的时候已经是在讲多态了,所以就以多态为开始吧。以后再慢慢补充。虽然这样可能导致结构混乱。
- 多态是什么,前提是什么?
- 多态中成员访问的特点?
- 多态的好处及弊端?
- 什么是向上转型?什么是向下转型?
- 抽象类概述及其特点?
- 抽象类成员特点?
- 抽象类的小问题
- 接口的概述及其特点?
- 接口的成员特点?
- 抽象类和接口的区别?
1.多态是什么,前提是什么?
- 多态的定义:指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。
- 编译时多态:方法的重载; 运行时多态:JAVA运行时系统根据调用该方法的实例的类型来决定选择调用哪个方法则被称为运行时多态。
- 多态存在的三个必要条件: 一、要有继承; 二、要有重写; 三、父类引用指向子类对象。
2.多态中成员访问的特点?
- 成员变量:编译看左边,运行看左边。
- 普通方法:编译看左,运行看右:对于上转型对象,编译期间会看父类有没有这个成员或者方法,运行时会根据右边子类实际对象来访问或者调用。
- 静态函数:静态函数是静态的绑定到类上,编译和运行都参考左边。
3.多态的好处及弊端?
多态的好处:
1.提高了代码的维护性(继承保证)
2.提高了代码的扩展性(由多态保证)
多态的弊端:
1.不能使用子类的特有属性和行为。(强转之后才能用)
4.什么是向上转型?什么是向下转型?
向上转型:是面向对象继承的一种形式,是指子类对象转换为父类对象。
向下转型:父类引用的对象转换为子类类型称为向下转型。
6.抽象类概述及其特点?
1.abstract关键字修饰
2.抽象类无法被实例化 (可以用父类引用指向子类对象)
3.抽象类有构造方法,是给子类创建对象的
4.抽象类中可以定义抽象方法 public abstract void m1();
5.抽象类中不一定有抽象方法,抽象方法一定在抽象类中
6.一个非抽象类继承抽象类,必须将抽象类中的抽象方法覆盖、实现、重写
7.抽象类成员特点?
成员变量:既可以是变量也可以是常量。
构造方法: 有构造方法,用于子类访问父类数据的初始化。
成员方法: 抽象类中方法既可以是抽象的,也可以是非抽象方法。
在父类中:非抽象方法:子类继承的事情,提高代码的复用性
抽象方法:强制要求子类做的事情。
9:抽象类的小问题
一个类如果没有抽象方法,可以是抽象类,即抽象类中可以完全没有抽象方法。
这样类的主要目的就是不让创建该类对象。
private 冲突;private修饰的成员不能被继承,从而不可以被子类重写,而abstract修饰的是要求被重写的。
final 冲突;final修饰的成员是最终成员,不能被重写,所以冲突,static 无意义;
static冲突;static修饰成员用类名可以直接访问,但是abstract修饰成员没有方法体,所以访问没有方法体的成员无意义。
10.接口的概述及其特点?
接口概述:
- 从狭义的角度讲就是指java中的interface
- 从广义的角度讲对外提供规则的都是接口
接口特点:
- 接口中定义的全都是抽象方法。
- 接口用关键字interface表示。即interface 接口名 { }
- 类实现接口用implements表示。即class 类名 implements 接口名 { }
- 接口不能实例化。
* 那么,接口如何实例化呢?按照多态的方式来实例化。
接口的子类:
* 可以是抽象类,但是意义不大。
* 可以是具体类,要重写接口中所有的抽象方法。(推荐方案)
11:接口的成员特点?
1、成员变量 public static final修饰,不写也会帮我们加上。
2、成员方法 public abstract修饰,不写也会帮我们加上。
3、构造方法 接口中不能有构造方法
12.抽象类和接口的区别?
A:成员区别
抽象类:
成员变量:可以变量,也可以常量
构造方法:有
成员方法:可以抽象,也可以非抽象
接口:
成员变量:只可以常量
成员方法:只可以抽象
B:关系区别
类与类
继承,单继承
类与接口
实现,单实现,多实现
接口与接口
继承,单继承,多继承
C:设计理念区别
抽象类 被继承体现的是:”is a”的关系。抽象类中定义的是该继承体系的共性功能。
接口 被实现体现的是:”like a”的关系。接口中定义的是该继承体系的扩展功能。