回顾:
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.classMama$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); //trueSystem.out.println(o1 instanceof Coo); //falseinterface 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 达内职员{ }