Day09_面向对象第四天
1、多态的概念和前提(掌握)
编译期间状态和运行期间状态不一样
3、举例
水(水,冰,水蒸气)
狗:狗是狗,狗是动物,狗是宠物,狗是食物//该处强调谁是谁的一种
B:要有方法重写或实现关系
C:要有父类引用指向子类对象,或父接口引用指向子类对象
2、多态的成员特点(掌握)
1、成员变量
2、成员方法
classFu{
publicString name ="爸爸";
publicvoid say(){
System.out.println("我来自20世纪");
}
}
classZiextendsFu{
publicString name ="儿子";
@Override
publicvoid 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作为一个动态语言,没有强类型的检查,而是以鸭子类型的方式提现 ...
随机推荐
- 引用CSS文件到html网页里方法
引用CSS文件到Html方法-css引入,css引用 使用不同的方法来引用css样式表,最终到达的效果相同,但是使用不同方法应用的css文件将影响到SEO及网页打开速度效率. html引用cs ...
- tomcat 创建虚拟主机
1. tomcat8 2. TOMCATROOT/conf/server.xml 增加<Host name="HOSTNAME" appBase="ROOTDir& ...
- 如何在Quagga BGP路由器中设置IPv6的BGP对等体和过滤
在本教程中,我们会向你演示如何创建IPv6 BGP对等体并通过BGP通告IPv6前缀.同时我们也将演示如何使用前缀列表和路由映射特性来过滤通告的或者获取到的IPv6前缀. 拓扑 服务供应商A和B希望在 ...
- list集合的遍历3种方法
package com.sort; import java.util.ArrayList; import java.util.Iterator; import java.util.List; /** ...
- bzoj 1911: [Apio2010]特别行动队
#include<cstdio> #include<iostream> #define M 1000009 #define ll long long using namespa ...
- UVa 11426 - GCD - Extreme (II)
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...
- .className = "highlight";.setAttribute("class", "highlight");
document.getElementById("top").innerHTML = newHTML; document.getElementById("contact& ...
- SPOJ COT2 树上找路径上不同值的个数
题目大意 给出多个询问u , v , 求出u-v路径上点权值不同的个数 开始做的是COT1,用主席树写过了,理解起来不难 很高兴的跑去做第二道,完全跟普通数组区间求k个不同有很大区别,完全没思路 膜拜 ...
- iOS-生成国际化包-配置App多语言支持
标签: ios国际化 ios多语言支持 xcode多语言支持 xcode生成多语言 国际化 it 分类: 功能知识 如果你的App需要支持多国语言.那么,就应该为你的App应用添加“国际化”支 ...
- Vm下 linux与windowsxp文件共享的方法
我的PC Operating System Host是Windows XP,Guest是Linux,virtualPC是VMware workstation.方法介绍大全请参见:Windows与Vmw ...