• Net学习日记_基础提高_5


    复习静态成员与实例成员?

    1.静态成员属于类;1个类第一次被访问的时候,这个类下面的所有的静态成员会被加载到静态存储区。静态成员只存在一份。

    public static int num;

    2.实例成员属于对象;随着对象的创建而创建,被GC回收的时候。

    private int num2 = "";

    问题?静态方法为啥不能访问实例成员?

    this关键字,base关键字不能在静态方法里使用。因此在静态方法中不能直接访问实例成员。

    第一次类的成员被访问的时候,静态构造函数执行。

    只执行一次。

    在执行第一次访问之前,限制性静态构造函数,在执行你的操作哦。

    复习继承

    继承的好处:

    1.方便代码管理。子类可以拥有父类的非私有成员。为了多态

    2.子类的构造函数,默认会去调用父类的无参数的构造方法。

    3.显示指定子类构造函数调用的父类构造函数,base

    4.创建子类对象的内存图

    5.this可以点出子类的所有成员和父类的非私有成员,base可以点出父类的非私有成员。

    6.单根性,传递性

    7.IS A

    里氏替换原则LSP

    子类可以替换父类的位置,并且程序的功能还不受影响。

    Person p = new Student();

    父类有的功能子类都有,所以不影响程序的功能。

    父类变量指向了1个子类对象。

    Person p = new Student();

    指针指向谁,是运行时绑定。

    类型指针指向谁,是根据其类型对象而决定的。

    当1个父类变量指向1个子类对象的时候,只能通过这个父类变量调用父类的成员,子类独有的成员无法调用。

    Person p1 = new Student();

    Person p = new Person();

    //子类变量不能指向1个父类对象

    //必须要有继承关系,才可以使用强制转换。

    // 如果1个父类变量指向了1个子类对象,那么可以将这个父类变量转换成子类对象。

    Student s1 = (Student)p1;

    //如果1个父类变量指向的就是1个父类对象,将这个父类对象转换成子类对象会报异常。

    //Student s0 = (Student)p;

    is关键字判断是否是指定类型

    bool b = p is Person;

    b = p is Student; // 1个Person不一定是Student

    b = p is Object;  // Person从Object继承

    b = p is Program; // 没有继承关系,表达式的值永远都是false

    //首先判断变量

    if(p1 is Student)

    {

       Student s2 = (Student) p1;

    }

    //as 转换 如果转换成功,引用指向s4;如果转换失败,不报异常,s4为NULL

    Student s4 = p as Student;

    虚函数(virtual关键字)(Java里面没有这个概念,因为子类均把父类覆盖掉)

    允许子类把父类的同名方法替换掉

    利用override在子类中,可以查看到在父类定义的虚方法

    如果子类重写了父类的虚方法,那么通过父类变量来调用这个方法的时候会调用子类的。

    class Person

    {

      public virtual void SayHi()

    {

    Console.....

    }

    }

    class Teacher:Person

    {

    public override void SayHi()

    {

    Console....

    }

    }

    多态(很重要!!!)

    同一种行为,对于不同的事务,有不同的表现形式。

    多态表现一:将父类作为方法的参数

                         屏蔽多个子类的不同,将多个子类当成父类来统一处理。

    继承:继承是为了多态,多态是为了扩展。

    面向对象最终目的是为了开闭原则。

    多态表现二:将父类类型作为返回值。

     多态是基于继承,所以没有继承,多态是无法实现的。

  • 相关阅读:
    mac下远程win8.1时提示"桌面连接无法验证您希望连接的计算机的身份"的解决办法
    在sublime text3下,用快捷键把文件打开到浏览器中
    实现多行文字对齐的原理
    js中===、==、!=、!===的区别
    sublime格式化HTML+CSS插件--HTML-CSS-JS Prettify
    实现多行文字居中方法(兼容IE6)
    telnet localhost 8089 ==》》命令使用
    在Tomcat下部属项目三种方式:
    java服务器
    可变参数
  • 原文地址:https://www.cnblogs.com/lisong-home/p/7656503.html
Copyright © 2020-2023  润新知