博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Net学习日记_基础提高_5
阅读量:5226 次
发布时间:2019-06-14

本文共 1643 字,大约阅读时间需要 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....

}

}

 

多态(很重要!!!)

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

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

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

 

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

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

 

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

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

 

转载于:https://www.cnblogs.com/lisong-home/p/7656503.html

你可能感兴趣的文章
第二次项目冲刺(Beta阶段)5.24
查看>>
python的多行注释
查看>>
连接Oracle需要jar包和javadoc文档的下载
查看>>
UVA 10976 - Fractions Again?!
查看>>
poj 1183
查看>>
Dreamweaver cc新版本css单行显示
查看>>
Redis的Sorted Set有序集合命令
查看>>
【android】安卓的权限提示及版本相关
查看>>
3D重建的进阶了解---深度图,网格,体素,点云是什么
查看>>
JavaScript可否多线程? 深入理解JavaScript定时机制
查看>>
IOS基础学习
查看>>
js 模拟滚动条
查看>>
PHP 导出 Excell
查看>>
关于springmvc json交互产生的406错误
查看>>
python之-框架
查看>>
Gradle多项目构建
查看>>
Java基础教程——网络基础知识
查看>>
c++文件的读写
查看>>
[Web] 如何实现Web服务器和应用服务器的负载均衡?
查看>>
创建文件夹命令
查看>>