Day09_面向对象第四天
1、多态的概念和前提(掌握)
编译期间状态和运行期间状态不一样
3、举例
水(水,冰,水蒸气)
狗:狗是狗,狗是动物,狗是宠物,狗是食物//该处强调谁是谁的一种
B:要有方法重写或实现关系
C:要有父类引用指向子类对象,或父接口引用指向子类对象
2、多态的成员特点(掌握)
1、成员变量
2、成员方法
classFu{publicString name ="爸爸";publicvoid say(){System.out.println("我来自20世纪");}}classZiextendsFu{publicString name ="儿子";@Overridepublicvoid say(){System.out.println("我来自21世纪");}}publicclassTest01{publicstaticvoid main(String[] args){//父类引用指向子类对象,这就是多态Fu fu =newZi();/*编译的时候查看 = 号左边的Fu类中是否包含name属性,如果包含,就编译通过,运行的时候看 = 左边是Fu,所以输出爸爸。总结:成员变量编译看左边,运行看左边*/System.out.println(fu.name);/*编译的时候查看 = 号左边的Fu类中是否包含say方法,如果包含,就编译通过,运行的时候看 = 右边的对象,发现右边是子类对象,所以调用子类的方法。总结:成员方法编译看左边,运行看右边*/fu.say();}}
3、多态的弊端(掌握)
父类引用不能直接使用子类对象的特有功能
4、多态的好处(了解)
增强了程序的扩展性和可维护性
5、基本类型 和 引用类型中类型转换问题(掌握)
隐式转换:
byte b = 1;int i = b;
强制转换:
int i = 1;byte b = (byte)i;
向上转型 :子类引用赋值给父类引用
Zi zi = new Zi();Fu fu = zi;
向下转型 :父类引用赋值给子类引用Fu fu = new Zi();Zi zi = (Zi)fu;
3、引用类型转换过程中的问题
5、抽象类和抽象方法(掌握)
| 父类 |
abstract class Animal { public abstract void eat(); } |
| 子类1 |
class Dog extends Animal { public void eat() { System.out.println("eat 骨头"); } } |
| 子类2 |
class Cat extends Animal { public void eat() { System.out.println("eat 鱼"); } } |
| 测试类 | Animal animal = new Dog(); animal.eat(); Animal cat = new Cat(); cat.eat(); |
6、抽象类的基本特点(掌握)
1、抽象方法和抽象类用关键字abstract表示。
2、有抽象方法的类一定是抽象类(或者接口)。抽象类中不一定有抽象方法。
3、抽象类不能被实例化。
4、如果一个类继承抽象类,那么这个类要么本身也是抽象类。这个类 必须 重写父类的所有抽象方法。
问:既然不能被实例化,那么有构造方法有什么用?
答:可以用于子类访问父类数据前,对父类数据进行初始化。
3、成员方法
2、非抽象方法和抽象方法的作用
抽象方法是为了要求子类做某些事情。
非抽象方法是为了提高代码复用性,被子类继承。
9、抽象类的案例讲解(理解)
10、接口
interface 接口名
{
//静态常量和抽象方法
class 类名 implements 接口名1,接口名2...
11、接口的基本特点(掌握)
1、接口不能被实例化。
2、接口中的方法:
要么被子类重写。
12、接口的成员特点(掌握)
因为接口的成员变量有默认修饰符:public static final
推荐:永远自己给出修饰符。
2、构造方法
没有构造方法//因为接口中的成员变量都被final修饰,定义的时候必须做初始化
任何类如果没有继承父类,那么这个类就继承自Object类。//所有类都直接或者间接的继承自Object类。Object类是所有类的超类
3、成员方法:接口中的方法都是抽象的
因为接口中的成员方法有默认修饰符:public abstract
推荐:永远自己给出修饰符。4、接口的注意事项接口中不能有静态代码块,代码块,构造方法
13、接口的思想特点(了解)
接口是对外暴露的规则
接口是程序的功能扩展
接口的出现降低耦合性
接口可以用来多实现
14、抽象类和接口,类和接口的关系
1、抽象类和接口的关系(掌握)
抽象类:
成员变量:可以是变量,也可以是常量。
构造方法:有构造方法。
成员方法:可以是抽象方法,也可以是非抽象方法。
接口:
成员变量:只能是常量。
默认修饰符:public static final
成员方法:只能是抽象方法。
默认修饰符:public abstract
2、类与接口的关系(掌握)
类与类:
继承关系,只能单继承,可以多层继承。
类与接口:
实现关系,可以单实现,也可以多实现。
还可以在继承一个类的同时,实现多个接口。
接口与接口:
3、设计理念的区别
抽象类被继承,这个类中定义的是整个继承体现的共性内容。
体现:is a
接口被实现,这个接口中定义的是整个体现的扩展内容。
15、什么时候定义抽象类,什么时候定义接口(掌握)
16、综合案例(理解)
乒乓球运动员和教练
篮球运动员和教练
为了出国交流,乒乓球运动员和教练需要说英语。

| 说英语接口 | interface SpeakEnglish { public abstract void speak(); } |
| 人的抽象类 | abstract class Person { private String name; private int age; public Person(){} public void setName(String name) { this.name = name; } public String getName() { return name; } public void setAge(int age) { this.age = age; } public int getAge() { return age; } //睡觉的方法 public void sleep() { System.out.println("睡觉"); } //吃饭的方法 public abstract void eat(); } |
| 运动员的抽象类 | abstract class Player extends Person { public Player(){} //学习的方法 public abstract void study(); } |
| 教练的抽象类 | abstract class Coach extends Person { public Coach(){} //教的方法 public abstract void teach(); } |
| 乒乓球运动员 | class PingPangPlayer extends Player implements SpeakEnglish { public PingPangPlayer(){} public void speak() { System.out.println("乒乓球运动员学习英语"); } public void eat() { System.out.println("乒乓球运动员吃蛋炒饭"); } public void study() { System.out.println("乒乓球运动员学习如何接发球"); } } |
| 篮球运动员 | class BasketPlayer extends Player { public BasketPlayer(){} public void eat() { System.out.println("篮球运动员吃牛肉面"); } public void study() { System.out.println("篮球运动员学习如何运球,过人,投篮"); } } |
| 乒乓球教练 | class PingPangCoach extends Coach implements SpeakEnglish { public PingPangCoach(){} public void speak() { System.out.println("乒乓球教练学习英语"); } public void eat() { System.out.println("乒乓球教练吃白米饭"); } public void teach() { System.out.println("乒乓球教练教如何接发球"); } } |
| 篮球教练 | class BasketCoach extends Coach { public BasketCoach(){} public void eat() { System.out.println("篮球教练喝牛肉汤"); } public void teach() { System.out.println("篮球教练教如何运球,过人,投篮"); } } |
| 测试类 | class PersonTest { public static void main(String[] args) { //乒乓球运动员 PingPangPlayer ppp = new PingPangPlayer(); ppp.setName("邓亚萍"); ppp.setAge(50); System.out.println(ppp.getName()+"***"+ppp.getAge()); ppp.eat(); ppp.study(); ppp.speak(); //剩下的测试自己补齐 } } |
17、今天必须掌握的内容。以及常见的笔试题和面试题(学完这个就可以放心学习后面的知识了)
Day09_面向对象第四天的更多相关文章
- java面向对象中四种权限(private,protected,public,友好型)详解
转自http://blog.csdn.net/a1237871112/article/details/50926975 及http://blog.csdn.net/blackmanren/articl ...
- #5 Python面向对象(四)
前言 本节将是Python面向对象的最后一篇博文了,这节将记录类的特殊方法.特殊成员方法.旧类和新类的不同,以及一些其他知识.Go! 一.类的特殊方法 Python有三种特殊方法:实例方法.静态方法. ...
- C#面向对象(四):其他面向对象知识
前文链接: C#面向对象(一):明确几个简单的概念作为开胃菜 C#面向对象(二):封装和继承 C#面向对象(三):多态 今天是这个系列的收尾文章了,来谈谈其他面向对象知识. 1.嵌套类 1.1概念 在 ...
- 面向对象第四单元(UML)及期末总结
前言 统一建模语言(英语:Unified Modeling Language,缩写 UML),是软件架构设计建模和规约的语言. 在UML系统开发中有三个主要的模型: 功能模型:从用户的角度展示系统的功 ...
- 面向对象第四单元(UML)总结
OO第四单元 一.总结本单元两次作业的架构设计 第一次作业 架构 第一次作业只有类图,所以全部的UmlElement都可以放在MyUmlInteraction中进行存储.计算和查找.对于类图来说,可以 ...
- 前端笔记之JavaScript面向对象(四)组件化开发&轮播图|俄罗斯方块实战
一.组件化开发 1.1组件化概述 页面特效的制作,特别需要HTML.CSS有固定的布局,所以说现在越来越流行组件开发的模式,就是用JS写一个类,当你实例化这个类的时候,页面上的效果布局也能自动完成. ...
- java面向对象编程(四)--类变量、类方法
1.什么是类变量? 类变量是该类的所有对象共享的变量,任何一个该类的对象去访问它时,取到的都是相同的值,同样任何一个该类的对象去修改它时,修改的也是同一个变量. 如何定义类变量? 定义语法: ...
- Python入门之面向对象编程(四)Python描述器详解
本文分为如下部分 引言——用@property批量使用的例子来引出描述器的功能 描述器的基本理论及简单实例 描述器的调用机制 描述器的细节 实例方法.静态方法和类方法的描述器原理 property装饰 ...
- python面向对象(四)之抽象类与接口
学过java的应该知道java有抽象类和接口的那么python呢?(以前写的关于java抽象类的笔记java抽象类与接口) python作为一个动态语言,没有强类型的检查,而是以鸭子类型的方式提现 ...
随机推荐
- gitlab配置邮件通知
配置用户提交评论.添加issue等的邮件通知: Gitlab邮件提醒方便跟踪项目进度,在这里介绍两种方式,一种是用系统的sendmail发送邮件,另一种是GMAIL的stmp来发送邮件 第一种 用系统 ...
- 使用Camera进行拍照
Android应用提供了Camera来控制拍照,使用Camera进行拍照的步骤如下: 1.调用Camera的open()方法打开相机. 2.调用Camera的getParameters()方法获取拍照 ...
- HDU 4035 Maze 概率dp,树形dp 难度:2
http://acm.hdu.edu.cn/showproblem.php?pid=4035 求步数期望,设E[i]为在编号为i的节点时还需要走的步数,father为dfs树中该节点的父节点,son为 ...
- Android Phonebook编写联系人UI加载及联系人保存流程(三)
2014-01-07 09:54:13 将百度空间里的东西移过来. 本文从点击“添加联系人”Button开始,分析新建联系人页面UI是如何加载,以及新的联系人信息是如何保存的,借此,我们一探Phon ...
- Python中subprocess学习
subprocess的目的就是启动一个新的进程并且与之通信. subprocess模块中只定义了一个类: Popen.可以使用Popen来创建进程,并与进程进行复杂的交互.它的构造函数如下: subp ...
- #数据结构-fib
/////////////////////////////////////////////////////////////////////////////// // // FileName : fic ...
- struts中的数据校验
1.struts中如何进行数据校验 在每一个Action类中,数据校验一般都写在业务方法中,比如login().register()等.struts提供了数据校验功能.每个继承自ActionSuppo ...
- ubuntu安装vim
1.安装 sudo apt-get install vim-gtk 2.安装完成之后,在命令行敲入vi,按“tab”键,可以看到,已经有vim命令的存在,安装成功. 3.配置 sudo vim /et ...
- ie浏览器兼容性快速处理小招
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- ssh原理
客户端向服务器端发出连接请求 服务器端向客户端发出自己的公钥 客户端使用服务器端的公钥加密通讯密钥然后发给服务器端 如果通讯过程被截获,由于窃听者即使获知公钥和经过公钥加密的内容,但不拥有私 ...
