黑马程序员技术交流社区

标题: 刚总结的面向对象三大特性,请指点,发现错误告知,谢谢 [打印本页]

作者: double[K]    时间: 2016-11-17 22:23
标题: 刚总结的面向对象三大特性,请指点,发现错误告知,谢谢
面向对象(世间万物皆对象)——
    1.面向过程与面向对象的区别:
        遇到问题,面向过程想的是自己怎么解决;而面向对象想的是我该找谁来帮我解决问题,找不到就自己创造一个人来帮自己解决;
    2.面向对象的好处:
        1.符合人类的思维习惯;
        2.相比面向过程强调的是执行者的作用,而面向对象强调的是指挥者的作用;
        3.能将复杂的问题简单化;
    3.类与对象的定义以及关系
        1.类——是对现实生活中某一事物的描述;而事物又具有相应的属性和功能;对应的在类中将属性称为类的成员变量,功能称为成员方法;
        2.对象是类的实例化
        3.通过对象调用类的方法(功能);
    4.成员变量与局部变量的区别
        1.定义位置不同:成员变量定义在类中方法外;局部变量定义在方法内或语句中;
        2.作用域不同:成员变量整个类;局部变量方法内或语句内;
        3.默认值不同:成员变量不初始化,有默认值;而局部变量使用前必须初始化,无默认值;
        4.内存位置不同:成员变量堆内存;局部变量栈内存;
        5.生命周期不同:成员变量整个类结束时死亡;局部变量在所在方法结束或所在语句结束时立马死亡;
    5.写main方法的类叫做测试类;
   

封装——(针对的是一个类,对一种事物的封装)
    1.封装好处:提高了代码的安全性和复用性;
    2.private(权限修饰符):成员修饰符,私有,被修饰的成员变量只能在本类中(直接)使用;所以被private修饰后,得提供相应的公共访问的方式(方法)即方法;get/set方法
    3.相比没有private修饰时,人们在测试类中用类的对象直接(对象.变量名)就可以使用, 这样就可以随意更改成员变量的值,若值违背现实情况,也没有提示报错,具有安全隐患;所以用private修饰后,代码的安全性提高了,测试类中想调用成员变量只能通过set/get方法赋值取值;而在set/get方法中我们可以对所要赋的值进行限定,这就是安全性提高的原因;
    4.在类中,当成员变量与局部变量重名时,使用遵循“就近原则”
    5.this——
        1.区分成员变量和局部变量;
        2.在测试类中,类的哪个对象调用自定义类中的成员方法,则成员方法中的this关键字就代表这个对象;
    6.private仅是封装的一种体现形式;




继承——(针对多个有关系的类,是类之间的一种关系,使类联系紧密)/extends
    1.继承好处:
        1.复用性
        2.多态的前提
    2.继承:父类,子类;子类可以自动拥有父类非私有的成员;
    3.注意:
        1.只能单继承,不能多继承
        2.一个父类可以拥有多个子类;
        3.java支持多重继承;
    4.继承体系:
        根源:子类共性抽取,形成父类;
        父类越往上越抽象;子类最具体,不但有共性,还有自己的特性;
    5.子类对象调用成员
        1.子类自己有的,就直接调用自己的;
        2.子类没有的就调用父类的;
    6.super:当子类与父类出现同名变量时,用super关键字区分
        super调用父类成员;this调用本类成员;
    7.重写(是对父类功能的扩展)
        在继承中,重写,子类重写父类的方法;除了父类方法中的功能外,还可以添加新的功能;
        注意:重写时子类权限>=父类方法权限,其他一样
        权限:public>protected>default(默认)>private
    8.default:不写表示默认,写了编译出错;
    9.抽象类:abstract
        1.抽象类是子类共性抽取形成的,抽象类中的抽象方法不知道具体执行功能,所以没有方法体;
        2.抽象类/抽象方法都用abstract修饰;
        3.抽象类中可以没有抽象方法,但有抽象方法的类一定是抽象类
        4.抽象类不能创建对象;强制子类继承
            abstract与private/final/static不能共存;
        5.抽象类强制要求子类重写父类方法(重写扩展功能,保障程序功能的完整性);
        6.子类必须全部重写父类中的抽象方法,然后才能创建对象;若指重写一部分,子类还是一个抽象类;
        7.继承关系存在,则子类在创建对象的同时,系统默认为父类创建对象;



接口——(接口类似抽象类但   接口!=抽象类)(世间万物都用功能,即世间万物都有接口)
    1.接口是功能的集合;
    2.接口中方法全部抽象方法,只描述具备的方法,不具体实现;
    3.定义; interface   类比    class
    4.成员方法定义固定格式;
        public abstract 返回值类型 方法名(参数列表);
        public 写不写都可以,不写也代表public;
    5.成员变量定义;
        public static final 数据类型 变量名=值;
        常量,固定值,不可更改;
    6.自定义实现类(实现)接口的功能;创建实现类对象;
    7.接口成员变量定义的特点:public static fianl 修饰符写不写都存在;
          成员方法定义特点:public abstract 写与不写都存在;
    8.实现类重写接口中的一部分方法,则实现类是抽象类;
    9.接口可以多实现(implements)——不存在安全隐患
        类的多继承 存在安全隐患是因为,抽象类中有非抽象的方法,如果两个抽象方法中有同名的非抽象方法,子类重写不能确定(成员变量)(成员方法)重写哪一个,出现安全隐患;
        接口的多继承 不存在安全隐患是因为,接口中全部都为抽象方法,没有具体的方法体,接口功能的实现依赖于子类的重写,所以即使多个接口中有同名的方法,也不会出现安全隐患;
    10.多实现时应避免两个接口中存在返回值类型不同、方法名相同、参数列表相同的情况;因为在实现类重写接口方法时,实现类中将会出现同名方法,编译出错;
    11. 多实现弥补了单继承的缺陷;
    12.——        类与类     单继承
               接口与接口  多继承
               类与接口   多实现

    13.(面试)java中有多继承吗?
        类只有单继承;接口与接口间存在多继承;

    14.接口思想:
        符合规则,降低耦合,扩展功能
    15.优先使用接口,次选抽象类



多态——
    1.多态——父类引用变量指向子类对象;(向上转型)
    2.三种形式——
        普通类;
        抽象类;
        接口;
    3.多态两大转型
        1.向上转型(调用子父类共有的方法):子类转为父类,由小转大,多态的常规写法,在父类引用变量调用成员变量时,编译时看父类,运行时还看父类;     调用成员方法时,编译看父类,运行看子类(因为继承导致多态,父类中的方法都被子类重写了,而且功能更加完善;所以运行时看子类)
        2.向下强转(调用子类特有的方法)
    4.instanceof 关键字——用来判断某个对象是否属于某种数据类型
        demo:
            一个方法返回值类型是父类Animal,则在方法中返回一个子类对象;而方法外的人并不知次方法的具体实现细节,所以只知道调用此方法返回的是一个动物Aniaml类的对象,不知道具体是什么动物,此时就需要 instanceof来判断;
    5.@override 标志标识“这是一个重写的方法”;
            


作者: duanqichao    时间: 2016-11-19 01:06
private仅是封装的一种体现形式?这话不明白啥意……

作者: double[K]    时间: 2016-11-19 01:09
duanqichao 发表于 2016-11-19 01:06
private仅是封装的一种体现形式?这话不明白啥意……

从封装的作用来说,封装就是提高了代码的安全性和复用性,而private私有化成员,就是起到这么一个作用,所以说private是封装的一种体现形式





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2