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作为一个动态语言,没有强类型的检查,而是以鸭子类型的方式提现 ...
随机推荐
- FZU 1914 Funny Positive Sequence
题目链接:Funny Positive Sequence 题意:给出一个数列,如果它的前i(1<=i<=n)项和都是正的,那么这个数列是正的,问这个数列的这n种变换里, A(0): a1, ...
- Https 协议
前言 HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版.即HTTP下 ...
- android自定义控件实例(Linearlayout组合TextView和ImageView)
2013-12-18 11:25:22 转载自: http://www.open-open.com/lib/view/open1328836804515.html 很多时候android常用的控件不能 ...
- xcode6中如何添加pch文件
在Xcode6之前,新建一个工程的时候,系统会帮我们自动新建一个以工程名为名字的pch (precompile header)文件,在开发过程中,可以将那些整个工程都广泛使用的头文件包含在该文件下,编 ...
- Android 获取网络状态
1.检测网络是否可用 public boolean isNetWorkConnected() { ConnectivityManager cm = (ConnectivityManager)getSy ...
- hashmap and hashtable
①继承不同. public class Hashtable extends Dictionary implements Map public class HashMap extends Abstrac ...
- 图解Nosql(hbase)与传统数据库的区别
图解Nosql(hbase)与传统数据库的区别http://www.aboutyun.com/thread-7804-1-1.html(出处: about云开发) 问题导读:1.nosql数据库能否删 ...
- 新发布GoldenGate 12c版本中的主要特性
业界领先的实时数据集成工具GoldenGate现在可以帮助企业在传统数据库和云平台.大数据平台之间进行实时复制.新的OGG 12c支持更多的异构数据库和大数据平台,进一步提升可管理性和对混合云 ...
- JS设计模式书籍、原则
圣经书:JavaScript 高级程序设计 设计模式:DesignPatterns by Erich Gamma.Richard Hlem.Ralph Johnson .Jhon Vlissides ...
- MongoDB C#驱动中Query几个方法 (转)
Query.All("name", "a", "b");//通过多个元素来匹配数组 Query.And(Query.EQ("nam ...