黑马程序员_java面向对象<二>

---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------


1,面向对象:

        封装:隐藏对象的属性和实现细节,仅对外提供公共访问方式

        继承: 多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可。

        多态: 一个对象在程序不同运行时刻代表的多种状态,父类或者接口的引用指向子类对象

2、类和对象:

    类:对现实世界中某类事物的描述,是抽象的,概念上的定义。

    对象:事物具体存在的个体。

3:成员变量和局部变量的区别:

    作用域

成员变量:针对整个类有效。

        局部变量:只在某个范围内有效。(一般指的就是方法,语句体内)

    存储位置

        成员变量:随着对象的创建而存在,随着对象的消失而消失,存储在堆内存中。

        局部变量:在方法被调用,或者语句被执行的时候存在,存储在栈内存中。

        当方法调用完,或者语句结束后,就自动释放。

    初始值

        成员变量:有默认初始值。

        局部变量:没有默认初始值,使用前必须赋值。

4、匿名对象

    匿名对象就是没有名字的对象。是对象的一种简写形式。

    应用:只调用一次类中的方法。

       可以作为实际参数在方法传递中使用

5、封装:指隐藏对象的属性和实现细节,仅对外提供公共访问方式。

           将变化隔离,方便使用,提高复用性,提高安全性。

6、构造方法:一般情况下,我们的自定义类都要手动给出无参构造方法。

7、构造代码块:

    (1)作用:给对象进行初始化,对象一建立就执行,而且优先于构造函数执行

    (2)构造代码块和构造函数的区别:

        构造代码块是给所有不同对象的共性进行统一初始化;

构造函数是给对应的对象进行初始化。

8this关键字

    (1)this关键字代表本类对象的一个引用,谁调用this所在的方法,this就代表谁 

    (2)this的使用场景

       a,用于区分同名成员变量和局部变量;

       b,在定义函数时,该函数内部要用到调用该函数的对象时,因为此时对象还没建立,故this代表此对象;

       c,构造函数间调用,this必须作为第一条语句存在。

9, 单例设计模式有两种方式:

        a,饿汉式 当类加载的时候,就创建对象。  

        classStudent {

            privateStudent(){}

           

            privatestatic final Student s = new Student();

           

            publicstatic Student getInstance() {

                returns;

            }

        }

        b,懒汉式 当使用的使用,才去创建对象。

        classStudent{

            privateStudent(){}

 

            privatestatic final Student s = null;

    public static Student getInstance() {

                if(s==null){

                    //线程1就进来了,线程2就进来了。

                    s= new Student();

                }

                returns;

            }

        }

开发常用饿汉式,因为饿汉式简单安全。懒汉式多线程的时候容易发生问题。


继承

    把很多类的相同特征和行为进行抽取,用一个类来描述。让多个类和这个类产生一个关系。

java中用extends关键字表示。

        java中只能单继承,没有多继承。

        java可以有多重()继承。

    继承的好处:

        继承的出现提高了代码的复用性。

        继承的出现让类与类之间产生了关系,提供了多态的前提。

 

        构造方法:

           子类的实例化过程

            子类创建对象时,会先去创建父类的对象。

            默认是去调用父类的无参构造方法。

           子类构造方法中,第一行默认是super()。

           当父类没有无参构造方法时,必须使用this或者super调用其他的构造方法。

    thissuper的区别:

        this:代表本类对象的引用。

        super:代表父类的存储空间。

final关键字

    可以用于修饰类,方法,变量。

    final修饰的类不能被继承。

    final修饰的方法不能被重写。

    final修饰的变量是一个常量。只能被赋值一次。

    内部类只能访问被final修饰的局部变量。

抽象类:abstract

       多个类有相同的方法声明,但是方法体不一样。这个时候,我们考虑把方法声明进行抽取。

       让子类继承后,自己去实现方法体。没有方法体的方法,我们需要用抽象标志下。

       该方法称为抽象方法,包含抽象方法的类就是抽象类。

特点:a,抽象类和抽象方法都要用abstract进行修饰

           b,抽象类不能被实例化

           c, 抽象类中不一定有抽象方法,但是,有抽象方法的类一定是抽象类。


        成员变量: 抽象类中可以有变量,也可以有常量。

        成员方法: 抽象类中可以有抽象方法,也可以有非抽象方法。

        构造方法:抽象类是一个类,所以,它有构造方法。虽然本身不能实例化。但是可以给子类实例化使用。


接口interface

当一个类中的方法都是抽象的时候,java提供了另一种表示方式,叫接口。

        a,是对外暴露的规则

        b,是功能的扩展

        c,接口的出现降低耦合性。

        d,接口可以多实现。如:CPU和主板、笔记本的USB插口、插座

       interface关键字表示。类与接口关系用implements表示。

成员变量: 默认修饰 public static final   

成员方法: 都是抽象的,默认修饰 public abstract   

类与类的关系: 是继承关系。类与类只能单继承,可以多重继承。

类和接口的关系: 是实现关系。类可以多实现接口。 类在继承一个类的同时,可以实现多个接口。

接口和接口的关系: 是继承关系。接口可以多继承接口。


接口和抽象类的区别:抽象类只能被单继承,接口可以多实现,接口的出现避免了多继承的局限性。

抽象类:

                成员变量:可以是变量,也可以是常量

                成员方法:可以是抽象方法,也可以是非抽象方法

                构造方法:有构造方法

        接口:

                成员变量:是常量。默认修饰 public static final

                成员方法:都是抽象方法。都有默认修饰 public abstract

                构造方法:没有构造方法

        抽象类中定义的是继承体系中的共性功能;接口中定义的是继承体系中的扩展功能。

        抽象类被继承是"is a"关系:x是y的一种; 接口被实现是"like a"关系:x像y的一种。


多态: 同一个对象,在程序不同时刻的多种运行状态。举例:动物,狗是狗,狗是动物。 存在着继承或者实现关系;父类(接口)引用指向子类(实现)对象。

        利:多态的存在提高了程序的扩展性和后期可维护性

        弊:虽然可以预先使用,但是只能访问父类中已有的功能,运行的是后期子类的功能内容。

                  不能预先使用子类中定义的特有功能。

多态中对象调用成员的特点

        Fu f =new Zi();

抽象类只能被单继承

成员变量:  编译看左边,运行看左边

成员方法:编译看左边,运行看右边

静态方法:编译看左边,运行看左边


instanceof关键字:用于判断某个对象是否是某种类型。

        格式 对象名instanceof子类(实现)


Object类:是所有类的根类,超类。

       java中提供的类以及我们自定义的类都直接或者间接的继承自Object类。

Object类中的方法:

        void finalize() ;当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。

        Class getClass() ;获取对象的字节码文件的描述类

        String name = s.getClass().getName();

        int hashCode() ; 获取对象的哈希值,是对象的内存地址值十进制表示

        String toString();返回对象的字符串表示。

        格式:getClass().getName()+"@"+Integer.toHexString(hashCode());

        boolean equals(Object obj) ;用于比较两个对象的地址值是否相同。

==

           可以用于比较基本数据类型,比较的就是基本数据类型的值是否相等。

           可以用于比较引用数据类型,比较的是对象的地址值是否相等。

equals

            equals只能用于比较引用数据类型的。

            Object提供的equals是用于比较对象地址值是否相同。

           自定义类中,如果重写了equals方法,按照自己的需求来比较。


---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------

详细请查看:<a href="http://edu.csdn.net" target="blank">http://edu.csdn.net</a>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值