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作为一个动态语言,没有强类型的检查,而是以鸭子类型的方式提现 ...
随机推荐
- Asp.Net MVC EF各版本区别
2009年發行ASP.NET MVC 1.0版 2010年發行ASP.NET MVC 2.0版,VS2010 2011年發行ASP.NET MVC 3.0版+EF4,需要.Net4.0支持,VS2 ...
- spark 学习
三种编译方式 1. 编译文档:more—>buiding spark 2. 三种编译方式:SBT,Maven,打包编译 make-distribution.sh 运行方式 local,stand ...
- 利用开源框架Volley来下载文本和图片。
Android Volley是Android平台上很好用的第三方开源网络通信框架.使用简单,功能强大. 下载连接地址:http://download.csdn.net/detail/zhangphil ...
- 2.精通前端系列技术之seajs和gruntJs结合开发(三)
1.我们先来了解下模块化历史 模块化历史 nodeJS的出现(http://nodejs.org/) commonJS规范(http://www.commonjs.org/) 浏览器JS的模块化? A ...
- Linux 常用
1,解决ssh登录慢的问题记录 vim /etc/ssh/ssh_config # GSSAPIAuthentication no 把下面这一行的注释去掉 2,Linux查看当前是什么系统 ...
- python交互模式下cp65001异常
unknown encoding: cp65001异常 python安装后进入命令行交互模式,输入任何代码都报unknown encoding: cp65001异常 需要将编码(UTF-8)修改为 简 ...
- 详解C++中指针(*)、取地址(&)、解引用(*)与引用(&)的区别 (完整代码)
一.初步了解--指针与取地址 先看程序: #include<cstdio> int main(void) { int num = 7; int *p = # printf( ...
- C++质因式分解
分解质因数是将一个数差分成为几个质数相乘,本函数n初始取2 void prim(int m, int n) { if (m > n) { while (m%n) n++; m/=n; prim( ...
- navtab方法参数以及事件
参数(options) DOM方式初始化navtab的,推荐使用集合属性data-options定义参数,如果使用data属性定义参数,注意转换成对应的名称. 名称 类型 默认值 描述 id stri ...
- poj2250 最长上升子序列 + 输出
//Accepted 208 KB 0 ms //最长公共上升子序列+输出 //dp //输出时用的递归输出,注意条件判断 #include <cstdio> #include <c ...
