多态,抽象类,接口
目录
- 09.01_面向对象(多态的概述及其代码体现)
- 09.02_面向对象(多态中的成员访问特点之成员变量)
- 09.03_面向对象(多态中的成员访问特点之成员方法)
- 09.04_面向对象(多态中的成员访问特点之静态成员方法)
- 09.05_面向对象(超人的故事)
- 09.06_面向对象(多态中向上转型和向下转型)
- 09.07_面向对象(多态的好处和弊端)
- 09.08_面向对象(多态中的题目分析题)
- 09.09_面向对象(抽象类的概述及其特点)
- 09.10_面向对象(抽象类的成员特点)
- 09.11_面向对象(葵花宝典)
- 09.12_面向对象(抽象类练习猫狗案例)
- 09.13_面向对象(抽象类练习老师案例)
- 09.14_面向对象(抽象类练习员工案例)
- 09.15_面向对象(抽象类中的面试题)
- 09.16_面向对象(接口的概述及其特点)
- 09.17_面向对象(接口的成员特点)
- 09.18_面向对象(类与类,类与接口,接口与接口的关系)
- 09.19_面向对象(抽象类和接口的区别)
- 09.20_面向对象(猫狗案例加入跳高功能分析及其代码实现)
- 09.21_day09总结
- 作业
09.01_面向对象(多态的概述及其代码体现)
- A:多态(polymorphic)概述
- 事物存在的多种形态
- B:多态前提
- a:要有继承关系。
- b:要有方法重写。
- c:要有父类引用指向子类对象。
- C:案例演示
- 代码体现多态
09.02_面向对象(多态中的成员访问特点之成员变量)

- 成员变量
- 编译看左边(父类),运行看左边(父类)。
09.03_面向对象(多态中的成员访问特点之成员方法)
-
成员方法
- 编译看左边(父类),运行看右边(子类)。
![]()
09.04_面向对象(多态中的成员访问特点之静态成员方法)
- 静态方法
- 编译看左边(父类),运行看左边(父类)。
- (静态和类相关,算不上重写,所以,访问还是左边的)
- 只有非静态的成员方法,编译看左边,运行看右边
09.05_面向对象(超人的故事)
- A:案例分析
- 通过该案例帮助学生理解多态的现象
09.06_面向对象(多态中向上转型和向下转型)
- A:案例演示
- 详细讲解多态中向上转型和向下转型
Person p = new SuperMan();向上转型
SuperMan sm = (SuperMan)p;向下转型
- 详细讲解多态中向上转型和向下转型
09.07_面向对象(多态的好处和弊端)
- A:多态的好处
- a:提高了代码的维护性(继承保证)
- b:提高了代码的扩展性(由多态保证)
- B:案例演示
- 多态的好处
- 可以当作形式参数,可以接收任意子类对象
- C:多态的弊端
- 不能使用子类的特有属性和行为。
- D:案例演示
method(Animal a)
method(Cat c)
09.08_面向对象(多态中的题目分析题)
-
A:看下面程序是否有问题,如果没有,说出结果
class Fu { public void show() { System.out.println("fu show"); } } class Zi extends Fu { public void show() { System.out.println("zi show"); } public void method() { System.out.println("zi method"); } } class Test1Demo { public static void main(String[] args) { Fu f = new Zi(); f.method(); f.show(); } } -
B:看下面程序是否有问题,如果没有,说出结果
class A { public void show() { show2(); } public void show2() { System.out.println("我"); } } class B extends A { public void show2() { System.out.println("爱"); } } class C extends B { public void show() { super.show(); } public void show2() { System.out.println("你"); } } public class Test2DuoTai { public static void main(String[] args) { A a = new B(); a.show(); B b = new C(); b.show(); } }
09.09_面向对象(抽象类的概述及其特点)
- A:抽象类概述
- 抽象就是看不懂的
- B:抽象类特点
- a:抽象类和抽象方法必须用abstract关键字修饰
- abstract class 类名 {}
- public abstract void eat();
- b:抽象类不一定有抽象方法,有抽象方法的类一定是抽象类或者是接口
- c:抽象类不能实例化那么,抽象类如何实例化呢?
- 按照多态的方式,由具体的子类实例化。其实这也是多态的一种,抽象类多态。
- d:抽象类的子类
- 要么是抽象类
- 要么重写抽象类中的所有抽象方法
- a:抽象类和抽象方法必须用abstract关键字修饰
- C:案例演示
- 抽象类特点B:抽象类特点
- a:抽象类和抽象方法必须用abstract关键字修饰
- abstract class 类名 {}
- public abstract void eat();
- b:抽象类不一定有抽象方法,有抽象方法的类一定是抽象类或者是接口
- c:抽象类不能实例化那么,抽象类如何实例化呢?
- 按照多态的方式,由具体的子类实例化。其实这也是多态的一种,抽象类多态。
- d:抽象类的子类
- 要么是抽象类
- 要么重写抽象类中的所有抽象方法
09.10_面向对象(抽象类的成员特点)
- A:抽象类的成员特点
- a:成员变量:既可以是变量,也可以是常量。abstract是否可以修饰成员变量?不能修饰成员变量
- b:构造方法:有。
- 用于子类访问父类数据的初始化。
- c:成员方法:既可以是抽象的,也可以是非抽象的。
- B:案例演示
- 抽象类的成员特点
- C:抽象类的成员方法特性:
- a:抽象方法 强制要求子类做的事情。
- b:非抽象方法 子类继承的事情,提高代码复用性。
09.11_面向对象(葵花宝典)
- 案例演示
- 抽象类的作用
09.12_面向对象(抽象类练习猫狗案例)
- A:案例演示
- 具体事物:猫,狗
- 共性:姓名,年龄,吃饭
- 猫的特性:抓老鼠
- 狗的特性:看家
09.13_面向对象(抽象类练习老师案例)
- A:案例演示
- 具体事物:基础班老师,就业班老师
- 共性:姓名,年龄,讲课。
- 具体事物:基础班学生,就业班学生
- 共性:姓名,年龄,学习
09.14_面向对象(抽象类练习员工案例)
- A:案例演示
- 假如我们在开发一个系统时需要对程序员类进行设计,程序员包含3个属性:姓名、工号以及工资。
- 经理,除了含有程序员的属性外,另为还有一个奖金属性。
- 请使用继承的思想设计出程序员类和经理类。要求类中提供必要的方法进行属性访问。
09.15_面向对象(抽象类中的面试题)
- A:面试题1
- 一个抽象类如果没有抽象方法,可不可以定义为抽象类?如果可以,有什么意义?
- 可以
- 这么做目的只有一个,就是不让其他类创建本类对象,交给子类完成
- B:面试题2
- abstract不能和哪些关键字共存
09.16_面向对象(接口的概述及其特点)
- A:接口概述
- 从狭义的角度讲就是指java中的interface
- 从广义的角度讲对外提供规则的都是接口
- B:接口特点
- a:接口用关键字interface表示
- interface 接口名 {}
- b:类实现接口用implements表示
- class 类名 implements 接口名 {}
- c:接口不能实例化
- 那么,接口如何实例化呢?
- 按照多态的方式来实例化。
- d:接口的子类
- a:可以是抽象类。但是意义不大。
- b:可以是具体类。要重写接口中的所有抽象方法。(推荐方案)
- a:接口用关键字interface表示
- C:案例演示
- 接口特点
09.17_面向对象(接口的成员特点)
- A:接口成员特点
- 成员变量;只能是常量,并且是静态的并公共的。
- 默认修饰符:public static final
- 建议:自己手动给出。
- 默认修饰符:public static final
- 构造方法:接口没有构造方法。
- 成员方法:只能是抽象方法。
- 默认修饰符:public abstract
- 建议:自己手动给出。
- 默认修饰符:public abstract
- 成员变量;只能是常量,并且是静态的并公共的。
- B:案例演示
- 接口成员特点
09.18_面向对象(类与类,类与接口,接口与接口的关系)
- A:类与类,类与接口,接口与接口的关系
- a:类与类:
- 继承关系,只能单继承,可以多层继承。
- b:类与接口:
- 实现关系,可以单实现,也可以多实现。
- 并且还可以在继承一个类的同时实现多个接口。
- c:接口与接口:
- 继承关系,可以单继承,也可以多继承。
- a:类与类:
- B:案例演示
- 类与类,类与接口,接口与接口的关系
09.19_面向对象(抽象类和接口的区别)
-
A:成员区别
- 抽象类:
- 成员变量:可以变量,也可以常量
- 构造方法:有
- 成员方法:可以抽象,也可以非抽象
- 接口:
- 成员变量:只可以常量
- 成员方法:只可以抽象
- 抽象类:
-
B:关系区别
- 类与类
- 继承,单继承
- 类与接口
- 实现,单实现,多实现
- 接口与接口
- 继承,单继承,多继承
- 类与类
-
C:设计理念区别
- 抽象类 被继承体现的是:”is a”的关系。抽象类中定义的是该继承体系的共性功能。
- 接口 被实现体现的是:”like a”的关系。接口中定义的是该继承体系的扩展功能。
09.20_面向对象(猫狗案例加入跳高功能分析及其代码实现)
- A:案例演示
- 动物类:姓名,年龄,吃饭,睡觉。
- 猫和狗
- 动物培训接口:跳高
09.21_day09总结
- 把今天的知识点总结一遍。
作业
1:多态是什么,前提是什么?
事物的多种形态
存在继承关系,子类重写父类方法.
2:多态中成员访问的特点?
成员变量
- 编译看左边,运行看左边.
成员方法
- 编译看左边,运行看右边.
静态方法
- 编译看左边,运行看左边.
3:多态的好处及弊端?
- 好处:增强代码的维护性,复用性(继承)扩展性(子类是父类型,父类型可作为参数传递)
- 弊端:不能调用子类特有的成员变量和成员方法.必须进行向下转型.
4:什么是向上转型?什么是向下转型?
- 父引用指向子类对象. 子 ---> 父 向上转型
- 父类型对象强制转换成子类型 父---->子 向下转型,前必须判断类型一直 f.instancesOf(Son)
5:多态练习(上课敲的代码)
6:抽象类概述及其特点?
- 方法不知怎么实现,建议使用抽象方法.(共性功能类 ---> 定义为抽象类)
- 有抽象方法的一定是抽象类
- 抽象类不一定有抽象方法
- 成员 ---成员变量可以 为 变量 ,常量. 成员方法 可以是普通方法,也可以是抽象方法
- 抽象类 必须被 子类实例化,子类必须实现其所有的抽象方法. 抽象多态
- 抽象类的构造方法 被其子类 用来初始化 抽象类的数据
- is a,在继承体系中体现 共性功能.
7:抽象类成员特点?
- 成员变量可以 为 变量 ,常量.
- 成员方法 可以是普通方法,也可以是抽象方法
8:抽象类练习?
9:抽象类的小问题
A:一个类如果没有抽象方法,可不可以定义为抽象类?如果可以,有什么意义?
- 可以,不能本身实例化对象,必须由其子类实例化对象.
B:abstract不能和哪些关键字共存
- final
- final修饰的类不能被继承,修饰的方法不能被重写.而抽象类存在的意义就是被继承,抽象方法被重写.
- static
- 静态的通过类名点调用,但是调用抽象方法毫无意义,抽象方法只有被重写才有被调用的意义.
- private
- absract修饰的方法是为了在其子类中被发现,被重写.但是private修饰的方法在子类中不可见.
10:接口的概述及其特点?
- interface 一个类的扩展功能,是这个类实现某个接口
- 接口的目的就是对外暴露,对外提供规则.
- 类 可以 多实现接口
- 成员 --> 变量 全是 公有静态常量 public static final,不能被其子类修改,方法 全是公有抽象方法 public abstract,子类必须全部重写抽象方法,权限必须是 public
- 无构造方法,其子类无需先实例化接口,全是抽象方法和静态常量,没啥子初始化啊.
- 必须通过子类实例化对象 接口多态
11:接口的成员特点?
- 变量 全是 公有静态常量 public static final,不能被其子类修改
- 方法 全是公有抽象方法 public abstract,子类必须全部重写抽象方法,权限必须是 public
12:接口的练习?
13:抽象类和接口的区别?
- 共同点:
- 实例化:都必须通过子类进行实例化
- 都体现了多态
- 子类都必须实现/重写他们的抽象方法
- 不同点
- 抽象类的成员变量可以变量 和 常量,接口的成员变量只能是公有静态常量
- 抽象类的成员方法可以是普通方法,也可以是抽象方法;接口的成员方法必须是公有抽象方法.
- 抽象类有构造方法,被子类初始化父类数据用;接口无构造方法,全是抽象方法和常量没必要初始化.
- 抽象类 与类的关系只能单继承,多层继承;接口与类的关系是 多实现.
- 在继承体系中体现的功能: 抽象类是共性功能;接口是拓展功能(个性化)
- 抽象类的子类可以修改抽象类的属性值,接口的子类不能修改接口的常量.
14:案例
猫狗案例,加入跳高的额外功能
老师和学生案例,加入抽烟的额外功能
14:案例(根据上面的猫狗案例,完成下面的汽车案例)
利用面向对象的思想,结合猫狗的案例,仔细分析下面的描述,实现需求!
描述:汽车都具有跑的功能,普通的奥迪车也不例外,但是高端的奥迪车除了具有跑的功能外,还具有自动泊车和无人驾驶的功能!
需求:定义普通奥迪车,高端奥迪车,实现描述中的功能并测试
既然上了生活这条贼船,那就做个快乐的海盗。凸(`0´)凸


浙公网安备 33010602011771号