ASP.Net+Android+IOS开发------期待与您交流
<面向对象及总结------01>
面向对象:面向对象就是面向对象是相对于面向过程而言的,面向过程强调的是功能,面向对象强调的是将功能封装进对象。
面向对象主要分为三大特征,<封装>,<继承>,<多态>。
面向对象实现的目的
**把复杂简单化
**把程序员从执行者变成了指挥者
封装:隐藏对象的属性和方法,仅提供公共方法对外访问,有多种体现形式。
将变化隔离:将函数方法独立
方便使用:提供暴露出去的方法如电脑主机箱,这也是一种面向对象的方法
提高复用性:多次调用
提高安全性:仅仅是调用对象是不能使用的,还要使用特殊的获方法
关键字private:封装在代码中的体现
(1)私有的意思,权限修饰符
(2)用来修饰成员变量和成员函数
(3)用private修饰的成员只在本类中有效
(4)私有是封装的一种体现
继承:(1)当出现多个类时,类中有公共属性和公共的方法,就把他提取出来单独成一个类,在使用别的类继承他就可以使用它的公共方法了,这样大大的减少了代码,提高了复用性,和扩展性,继承的出现让类与类之间产生了关系,提供了多态的前提。
(2)继承的体系结构
A:多个具体的对象,不断的向上抽取共享的内容,最终形成了一个体系。这个体系叫做继承体系。
B:继承体系的学习和使用原则
**学习顶层的内容。因为他是整个体系的共性内容。
**创建子类使用。也就是使用底层的具体对象。
(3)继承的特点:
A:java中只能单继承,没有多继承。
B:java可以有多重(层)继承。
(4)继承的好处:
继承的出现提高了代码的复用性。
继承的出现让类与类之间产生了关系,提供了多态的前提。
(5)子父类中的成员关系
A:成员变量
在子类方法中使用一个变量时:
首先,在方法的局部变量中找这个变量,有则使用。
否则,在本类中找成员变量,有则使用。
否则,在父类中找成员变量,有则使用。
否则,报错。
B:成员方法
用子类对象使用一个方法时。
首先,在子类中找这个方法,有则使用。
否则,在父类中找这个方法,有则使用。
否则,报错。
重写和重载的区别?
重载:在同一类中。方法名相同,参数列表不同。重载可以改变返回类型。
重写:在不同类中(子父类中)。
方法声明相同(返回类型,方法名,参数列表均相同)。
重写需要注意:
**子类方法的访问权限要大于等于父类方法的访问权限。
**静态只能重写静态。但是这种情况一般不会出现。
构造方法
**子类的实例化过程
***子类创建对象时,会先去创建父类的对象。
默认是去调用父类的无参构造方法。
***子类构造方法中,第一行默认是super()
***为什么子类中第一行会默认有super()
因为他继承父类的成员使用,使用前这些成员必须初始化,
而他们是父类的成员,所以,必须通过父类进行初始化。
所以,会先创建一个父类的对象。
**当父类没有无参构造方法时
必须使用this或者super调用其他的构造方法。
(6)this和super的区别
this:代表本类对象的引用。
super:代表父类的存储空间。
多态: 父类引用或接口指向子类对象,一个对象在程序不同运行时的多种表现形式。
多态前提
A:存在着继承或者实现关系
B:有方法的重写
C:父类(接口)引用指向子类(实现)对象
同一个对象,在程序不同时刻的多种运行状态。举例:动物,狗是狗,狗是动物。水(气态,液态,固态)
比如吃饭,只要是生物都能吃饭,就可以使用吃饭功能,比如说猫,狗,猪,牛,他们都是动物,都有吃饭功能,如果我们想调用他们的吃饭功能时就要用,猫.eat(),狗.eat(),.......
然而他们吃的东西又不一样,这时我们就可以使用多态的特性,设定一个动物类,写一个吃饭方法,然后让子类动物都继承它,并复写他的run方法,这时我们就可以使用动物.eat().谁要吃饭就调用谁
多态的好处和弊端:
好处:多态的存在提高了程序的扩展性和后期可维护性
弊端:虽然可以预先使用,但是只能访问父类中已有的功能,运行的是后期子类的功能内容。
不能预先使用子类中定义的特有功能。
多态中对象调用成员的特点
Fu f = new Zi();
A:成员变量
编译看左边,运行看左边
B:成员方法
编译看左边,运行看右边
C:静态方法
编译看左边,运行看左边
多态的思想
指挥同一批对象做事情。举例:带兵打仗,下课等。
成员变量和局部变量的区别
(1)作用域
成员变量:针对整个类有效。
局部变量:只在某个范围内有效。(一般指的就是方法,语句体内)
(2)存储位置
成员变量:随着对象的创建而存在,随着对象的消失而消失,存储在堆内存中。
局部变量:在方法被调用,或者语句被执行的时候存在,存储在栈内存中。
当方法调用完,或者语句结束后,就自动释放。
(3)初始值
成员变量:有默认初始值。
局部变量:没有默认初始值,使用前必须赋值
构造方法:
在面向对象中关于对象调用构造方法的使用注意事项
(1)特点:
方法名与类名相同
没有返回类型
没有返回值
(2)作用:构造函数是用于创建对象,并对其进行初始化赋值,对象一建立就自动调用相对应的构造函数,
(3)构造方法的注意事项:
A:如果一个自定义类没有构造方法,系统会默认给出一个无参构造方法。
B:如果一个自定义类提供了构造方法,那么,系统将不再给出无参构造方法。
这个时候,你可以不使用无参构造方法。
如果你想使用,那么,就必须手动给出无参构造方法。
建议:一般情况下,我们的自定义类都要手动给出无参构造方法,在利用构造方法重载的特性。
(4)构造方法和成员方法的区别
A:格式区别
构造方法和类名相同,并且没有返回类型,也没有返回值。
普通成员方法可以任意起名,必须有返回类型,可以没有返回值。
B:作用区别
构造方法用于创建对象,并进行初始化值。
普通成员方法是用于完成特定功能的。
C:调用区别
构造方法是在创建对象时被调用的,一个对象建立,只调用一次相应构造函数
普通成员方法是由创建好的对象调用,可以调用多次
构造代码块:
(1)作用:给对象进行初始化,对象一建立就执行,而且优先于构造函数执行
(2)构造代码块和构造函数的区别:
构造代码块是给所有不同对象的共性进行统一初始化
构造函数是给对应的对象进行初始化
this关键字
(1)this关键字代表本类对象的一个引用,谁调用this所在的方法,this就代表谁
(2)this的使用场景
A:用于区分同名成员变量和局部变量;
B:在定义函数时,该函数内部要用到调用该函数的对象时,因为此时对象还没建立,故this代表此对象
B:构造函数间调用
**这个时候,this(参数)必须作为第一条语句存在。
Person p = new Person();在内存中做了哪些事情。
(1)将Person.class文件加载进内存中。
(2)如果p定义在主方法中,那么,就会在栈空间开辟一个变量空间p。
(3)在堆内存给对象分配空间。
(4)对对象中的成员进行默认初始化。
(5)对对象中的成员进行显示初始化。
(6)调用构造代码块对对象进行初始化。(如果没有就不执行)
(7)调用构造方法对对象进行初始化。对象初始化完毕。
(8)将对象的内存地址赋值给p变量,让p变量指向该对象。
匿名对象
匿名对象就是没有给对象起名字的对象。
使用:
一般在对象只调用一次的时候和只调用一次类中方法的时候使用。
可以作为实际参数在方法中传递。
实例:
Class Person{
Person(){}
public void run(){
Syso(“匿名对象调用”);
}
}
class Demo{
public static void main(String []args){
New Person();
//对象只调用一次的时候,当此对象一建立就自动运行类中的构造方法
New Person().run();
//直接使用匿名对象调用类中方法,仅限于只使用一次的时候。
}
}
ASP.Net+Android+IOS开发------期待与您交流
详细请查看:http://edu.youkuaiyun.com