zoukankan      html  css  js  c++  java
  • 多态/接口

    回顾:
    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 达内职员{
    }

  • 相关阅读:
    转 [ javascript面向对象技术
    制作双击可运行的jar
    使用eclipse和maven一步一步配置web项目
    [转]hibernate三种状态详解
    [转]hibernate缓存机制所有详解
    Miniprofiler在普通net项目中的使用
    sql server 中更改默认实例
    使用awstats分析iis站点的日志
    NaN 和 Infinity
    反射的结果中排除隐藏的成员
  • 原文地址:https://www.cnblogs.com/xiaziteng/p/4733414.html
Copyright © 2011-2022 走看看