多态/接口

回顾:
1.static final常量
2.抽象方法:
abstract,只有方法的定义,没有方法的实现
3.抽象类:
abstract修饰
包含抽象方法的类必须是抽象类
不能被实例化
需被继承,子类:
1)重写父类的所有抽象方法----变不完整为完整
2)也声明为抽象的
意义:
1)父类的意义:
1.1)封装公共的,代码的重用
1.2)为所有子类提供一个公共的类型,向上造型
2)包含抽象方法,为所有子类提供一个统一的入口
4.接口:
是一个标准、规范
interface定义
只能包含常量和抽象方法
不能被实例化
需要被实现(implements)的,实现类:
必须重写接口中所有抽象方法
可以实现多个接口,用逗号分隔
若既继承又实现时,先继承后实现
接口间可以继承

 


class Dog{
String name;
int age;
}
class Person extends Dog{ //不合理的
}

Person p1 = new Person();
p1.name = "";
p1.age = 26;

 

 

 

 

 

 

继承是为了实现代码重用,但不能为了重用随意继承,
继承要符合is a的关系

class Student extends Person{
}
class Teacher extends Person{
}
class Doctor extends Person{
}

继承要符合is a的关系
class Six extends Shape{
public Six(double c){
this.c = c;
}
public double area(){
return 0.0721*c*c;
}
}

interface CCB extends UnionPay{
public void payFire();
}
class CCBImpl implements CCB{
重写4个方法
}

接口不包含构造方法,抽象类可以包含构造方法

1.构造方法初始化成员变量
2.不能包含普通方法

 


NstInnerDemo

 

 

有一个类就会有一个字节码文件

问:匿名内部类有独立的.class吗?------有

NstInnerDemo$1.class
NstInnerDemo$2.class
Mama$Baby.class

 

 

正课:
1.多态:多种形态
1)多态的意义:
1.1)同一类型的引用指向不同的对象时,有不同的实现
---------cut()、run()-----行为的多态
1.2)同一个对象被造型为不同的类型时,有不同的功能
---------我、水---------对象的多态
2)向上造型:
2.1)父类型的引用指向子类的对象
2.2)能向上造型的类型有: 父类、所实现的接口
2.3)能点出来什么,看引用的类型
3)强制类型转换,成功的情况有两种:
3.1)引用所指向的对象,就是该类型
3.2)引用所指向的对象,实现了该接口
4)强转失败会发生类型转换异常(ClassCastException),
强转之前最好通过instanceof来判断引用所指向的对象是否是该类型,
instanceof返回true或false,强转成功的条件就是instanceof为true的条件
2.面向对象三大特征:
1)封装:
1.1)类:封装的对象的数据和行为
1.2)方法:封装的是具体的业务实现细节
1.3)访问控制修饰符:封装的是访问的权限--保护数据
2)继承:
2.1)目的:代码的重用
2.2)父类:共有的 子类:特有的
继承后子类具有:父类的和子类的
2.3)单一继承,传递性
3)多态:
3.1)意义: 行为的多态、对象的多态
3.2)向上造型、强制类型转换、instanceof
3.3)表现形式: 重写(override)、重载(overload)
3.面向对象课程内容总结:
1)第一天:
1.1)什么是类?什么是对象?
1.2)如何创建类?如何创建对象?如何访问类成员?
1.3)引用类型之间画等号
1.4)null和NullPointerException
2)第二天:
2.1)方法的重载
2.2)构造方法
2.3)this关键字
2.4)引用类型数组
3)第三天:
3.1)java内存管理:堆、栈、方法区
3.2)继承
3.3)super关键字
3.4)向上造型
4)第四天:
4.1)方法的重写、重写与重载的区别
4.2)package、import
4.3)访问控制修饰符
4.4)static
4.5)final
4.6)static final常量
5)第五天:
5.1)抽象方法
5.2)抽象类
5.3)接口
6)第六天:
6.1)多态: 向上造型、强制类型转换、instanceof
6.2)成员内部类、匿名内部类

 

任务:
1.农行ATM系统完善
2.自己对面向对象总结
3.课后作业:只做第一题
4.每日一练
5.运行Shoot项目----了解需求

 

 

 

 


农行ATM机系统
要求:
1.所有卡都能插
2.只有农行卡才能支付电话费

判断卡的类型-------instanceof

 

走心

 

 

 

 

 

 


ATM机只是提供了一个入口(按钮),
实际操作的还是那个卡

 

 

 

 

 

 

 

 

 

 

 

UnionPay-----所有行
ICBCImpl-----工行卡
ICBC-----------工行
ABCImpl------农行卡
ABC------------农行

 

 

 

 


Aoo o1 = new Boo(); //向上造型
Boo o2 = (Boo)o1; //强制类型转换-----成功
Inter1 o3 = (Inter1)o1; //强制类型转换-----成功
Coo o4 = (Coo)o1; //强制类型转换-----失败

if(o1 instanceof Coo){
Coo o4 = (Coo)o1;
}

 

 

 

System.out.println(o1 instanceof Boo); //true
System.out.println(o1 instanceof Inter1); //true
System.out.println(o1 instanceof Coo); //false

interface Inter1{
}
class Aoo{
}
class Boo extends Aoo implements Inter1{
}
class Coo extends Aoo{
}

 

 

 

 

 


子类小,父类大

人 p1 = new 理发师(); //小到大
人 p2 = new 外科医生(); //小到大
理发师 p3 = new 人(); //大到小

 

 

 

 

 

 

 

子类中的东西,多于等于父类的


我 me = new 我();
me.讲课()/揍他()/咬他()/收工资()
讲师 p1 = me; //向上造型
p1.讲课();
孩子他妈 p2 = me;
老公的老婆 p3 = me;

p1.讲课();
p2.揍他();
p3.咬他();
p3.收工资();


interface 讲师{
讲课();
}
interface 孩子他妈{
揍他();
}
interface 老公的老婆{
咬他();
收工资();
}
class 我 implements 讲师,孩子他妈,老公的老婆{
讲课(){}
揍他(){}
咬他(){}
收工资(){}
}

 

 

 

 

 

 

 


人 p1 = new 理发师(); //向上造型
人 p2 = new 外科医生();
人 p3 = new 演员();

p1.cut();--------剪发
p2.cut();--------开刀
p3.cut();--------停止表演

abstract class 人{
abstract cut();
}
class 理发师 extends 人{
cut(){ 剪发 }
}
class 外科医生 extends 人{
cut(){ 开刀 }
}
class 演员 extends 人{
cut(){ 停止表演 }
}

 

 

 

 

 

 

 


设计原则:
1.将多个类公共的东西抽到父类中
2.若所有子类行为都一样,做成普通方法
若所有子类行为不一样,做成抽象方法
3.符合既是也是的关系时,使用接口

 


需求:
达内讲师-----------解决问题()、培训员工()、编辑稿件()
达内教学副总裁--解决问题()、培训员工()、编辑稿件()
韩总-----------------解决问题()、培训员工()、编辑稿件()
项目经理-----------编辑稿件()

interface 企业技术顾问{
解决问题();
培训员工();
}
interface 技术图书作者{
编辑稿件();
}
abstract class 达内职员{
姓名、年龄、薪酬
上班打卡(){ 按指纹、拍照 }
下班打卡(){ 按指纹、拍照 }
abstract 完成工作();
}
class 达内讲师 extends 达内职员 implements 企业技术顾问,技术图书作者{
}
class 达内项目经理 extends 达内职员 implements 技术图书作者{
}
class 达内班主任 extends 达内职员{
}

 

posted @ 2015-08-16 00:02  夏子藤  阅读(233)  评论(0编辑  收藏  举报