• oop.继承


    回顾:
    1.内存管理:JVM
    1)堆:new出来的对象以及成员变量
    成员变量生命周期:
    创建对象时存在,对象被回收时消失
    垃圾回收器(GC)不定期回收没有任何引用指向的对象
    回收过程是透明的,快一些System.gc()
    内存泄露: 不再使用的对象没有被及时的回收
    及时将不再使用的对象引用设置为null
    2)栈:用到的方法中的所有局部变量
    调用方法时在栈中分配该方法对应的栈桢,
    栈帧中包含该方法中参数以及方法中的局部变量,
    方法调用结束时,栈帧消失,局部变量一并消失
    局部变量生命周期:
    方法被调用时存在,方法调用结束时消失
    3)方法区:字节码文件以及方法
    方法只有一份,通过this来区分到底哪个对象访问的
    2.引用类型数组:
    Cell[] cells = new Cell[4];
    cells[0] = new Cell(1,2);
    cells[1] = new Cell(2,3);
    cells[2] = new Cell(3,4);
    cells[3] = new Cell(4,5);

    Cell[] cells = new Cell[]{
    new Cell(1,2),
    new Cell(2,3),
    new Cell(3,4),
    new Cell(4,5)
    };

    int[][] arr = new int[3][];
    arr[0] = new int[2];
    arr[1] = new int[3];
    arr[2] = new int[2];
    arr[2][1] = 100; //arr中第3个元素中的第2个元素赋值100

    int[][] arr = new int[3][4];
    for(int i=0;i<arr.length;i++){
    for(int j=0;j<arr[i].length;j++){
    arr[i][j] = 100;
    }
    }

    class O{
    Cell[] cells;
    O(){
    this(0,0);
    }
    O(int row,int col){
    cells = new Cell[4];
    cells[0] = new Cell(row,col);
    cells[1] = new Cell(row,col+1);
    cells[2] = new Cell(row+1,col);
    cells[3] = new Cell(row+1,col+1);
    }
    void drop(){
    for(int i=0;i<cells.length;i++){
    cells[i].row++;
    }
    }
    void moveLeft(){
    }
    void moveRight(){
    }
    void print(){
    }
    }


    笔记:
    1.继承:
    1)作用: 代码的重用
    2)通过extends实现继承
    3)父类/基类:所有子类所共有的变量和方法
    子类/派生类:子类所特有的变量的方法
    4)当子类继承父类后,子类具有:
    ------子类所特有的+父类所共有的
    5)一个类只能继承一个父类----单一继承
    一个父类可以有多个子类
    6)继承具有传递性
    7)java规定: 构造子类之前必须先构造父类
    子类构造方法的第一句默认有个super()调父类的无参构造
    若自己通过super调用父类构造的话,则不再默认提供
    super调用父类构造,必须位于子类构造的第1句
    2.super:指代当前对象的父类对象
    用法:
    1)super.成员变量名------访问父类的成员变量
    2)super.方法名()-----------调用父类的方法
    3)super()---------------------调用父类的构造方法
    3.向上造型:
    1)父类型的引用指向子类的对象
    2)能点出来什么,看引用的类型
    4.方法的重写(override):
    1)发生在父子类中,方法名相同,参数列表相同,方法体不同
    2)重写方法被调用时,看对象的类型

    任务:
    1.print()方法的重写
    2.看代码中的三个Demo的文件
    (重写,向上造型,super的)
    3.Cell类,T类,J类,Tetromino类,TJTest类
    --------------重写一次
    4.课后作业: 第3天的作业做4和5
    第4天的作业做1和2
    5.每日一练

    能点出来什么,看引用的类型

    main(){
    Aoo o = new Boo(); //向上造型
    System.out.println(o.a); //8
    System.out.println(o.b); //编译错误,
    }


    class Aoo{
    int a=0;
    }
    class Boo extends Aoo{
    int b;
    Boo(){
    a = 8;
    }
    }

    Student zs = new Student("zhangsan",25,"廊坊","JSD1507");
    zs.sayHi(); //zhangsan,25,廊坊,JSD1507

    Teacher wkj = new Student("wangkj",37,"佳木斯",5000);
    wkj.sayHi(); //wangkj,37,佳木斯,5000


    class Person{
    String name;
    int age;
    String address;
    void sayHi(){
    System.out.println(name+","+age+","+address);
    }
    }
    class Doctor extends Person{
    String level;
    }
    class Student extends Person{
    String className;
    void sayHi(){ //方法的重写(重新写,覆盖)
    System.out.println(name+","+age+","+address+","+className);
    }
    }
    class Teacher extends Person{
    double salary;
    void sayHi(){
    System.out.println(name+","+age+","+address+","+salary);
    }
    }


    Person p1 = new Student();
    Person p2 = new Teacher();
    Person p3 = new Doctor();

    Student p4 = new Person(); //编译错误

    Tetromino o1 = new T(); //向上造型
    Tetromino o2 = new J();
    Tetromino o3 = new O();
    Tetromino o4 = new L();
    Tetromino o5 = new I();
    Tetromino o4 = new S();
    Tetromino o5 = new Z();

    Tetromino类型的引用,既可以接收T型对象,
    也可以接收J型对象,
    也可以接收O型对象,
    ......

    class Tetromino{ //父类
    }
    class T extends Tetromino{ //子类
    }
    class J extends Tetromino{
    }
    class O extends Tetromino{
    }


    class Animal{ //动物类
    }
    class Tiger extends Animal{ //老虎类
    }

    //动物是动物
    Animal o1 = new Animal();
    //老虎是老虎
    Tiger o2 = new Tiger();
    //老虎是动物
    Animal o3 = new Tiger();
    父类型引用指向子类型对象

    //动物是老虎--------语义不通
    Tiger o4 = new Animal(); //语法也是不允许的


    T型参数只能接收T型对象
    J型参数只能接收J型对象
    O型参数只能接收O型对象
    -------------想打印7种图形,则必须做7个方法的重载

    假设:
    有一种类型,既能接收T型对象,
    也能接收J型对象,
    也能接收O型对象,
    也能接收L型对象,
    ......

    父类型


    只要行列配上了,就打*
    当4个*都没配上时,才打-

    并非一次判断就得到最终结果------开关

    假设i=2,j=6

    25
    26
    27
    36


    大if------优点:效率高
    缺点:扩展性不好
    开关-----缺点:效率低
    优点:扩展性好

    还有一种方式------效率高,扩展性好


    if(tt.cells[0].row==i && tt.cells[0].col==j
    ||
    tt.cells[1].row==i && tt.cells[01].col==j )

    Aoo o1 = new Aoo();
    o1.a/say();

    Boo o2 = new Boo();
    o2.b/show();
    o2.a/say();

    Coo o3 = new Coo();
    o3.c/sayHi(); //本类
    o3.b/show(); //直接父类
    o3.a/say(); //间接父类

    class Aoo{
    int a;
    void say(){}
    }
    class Boo extends Aoo{
    int b;
    void show(){}
    }
    class Coo extends Boo{
    int c;
    void sayHi(){}
    }

    Student zs = new Student();
    zs.className/study();
    zs.name/age/address/eat()/sleep();


    class Person{ //人类
    String name;
    int age;
    String address;
    void eat(){}
    void sleep(){}
    }
    子类 父类
    class Student extends Person{
    String className;
    void study(){}
    }
    class Teacher extends Person{
    double salary;
    void teach(){}
    }
    class Doctor extends Person{
    String level;
    void cut(){}
    }
    class T{
    }
    class J{
    }
    class O{
    }
    class L{
    }

    Tetromino

    生活中的继承:
    1.继承财产:
    钱不需要自己挣,自己也能花
    2.继承皇位:
    江山不需要自己打,自己也能坐
    3.继承工作:
    工作不需要自己找,自己也能干

  • 相关阅读:
    AAA
    Express4 启航指南
    nodejs 中的 NODE_PATH
    Windows 系统下设置Nodejs NPM全局路径
    C# VS Java
    在windows环境中使用varnish
    各种数据类型对比
    RubyGems 镜像
    npm国内镜像介绍
    WCF 身份验证 通过检查客户端IP
  • 原文地址:https://www.cnblogs.com/xiaziteng/p/4725672.html
Copyright © 2020-2023  润新知