A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 我是刘通 中级黑马   /  2015-10-9 20:39  /  1457 人查看  /  39 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

面向对象:
特点:
1.    将复杂的事情简单化;
2.    面向对象将以前过程中的执行者,变成了指挥者;
过程和对象在我们的程序中是如何体现的呢?过程其实就是函数;对象是将函数等一些内容进行了封装。
匿名对象使用场景:
1:当对方法只进行一次调用的时候,可以使用匿名对象。
2:当对象对成员进行多次调用时,不能使用匿名对象。必须给对象起名字。

在类中定义其实都称之为成员。成员有两种:
1:成员变量:其实对应的就是事物的属性。
2:成员函数:其实对应的就是事物的行为。
所以,其实定义类,就是在定义成员变量和成员函数。但是在定义前,必须先要对事物进行属性和行为的分析,才可以用代码来体现。

开发时,记住,属性是用于存储数据的,直接被访问,容易出现安全隐患,所以,类中的属性通常被私有化,并对外提供公共的访问方法

重载:
重载的定义是:在一个类中,如果出现了两个或者两个以上的同名函数,只要它们的参数的个数,或者参数的类型不同,即可称之为该函数重载了。
如何区分重载:当函数同名时,只看参数列表。和返回值类型没关系。

如何区分重载:当函数同名时,只看参数列表。和返回值类型没关系。

构造函数:
构造函数:用于给对象进行初始化,是给与之对应的对象进行初始化,它具有针对性,函数中的一种。
特点:
1:该函数的名称和所在类的名称相同。
2:不需要定义返回值类型。
3:该函数没有具体的返回值。
记住:所有对象创建时,都需要初始化才可以使用。

注意事项:一个类在定义时,如果没有定义过构造函数,那么该类中会自动生成一个空参数的构造函数,为了方便该类创建对象,完成初始化。如果在类中自定义了构造函数,那么默认的构造函数就没有了。

一个类中,可以有多个构造函数,因为它们的函数名称都相同,所以只能通过参数列表来区分。所以,一个类中如果出现多个构造函数。它们的存在是以重载体现的。

构造函数和一般函数有什么区别
1:两个函数定义格式不同。
2:构造函数是在对象创建时,就被调用,用于初始化,而且初始化动作只执行一次。
    一般函数,是对象创建后,需要调用才执行,可以被调用多次。
什么时候使用构造函数呢?
分析事物时,发现具体事物一出现,就具备了一些特征,那就将这些特征定义到构造函数内
创建一个对象都在内存中做了什么事情?
1:先将硬盘上指定位置的Person.class文件加载进内存。
2:执行main方法时,在栈内存中开辟了main方法的空间(压栈-进栈),然后在main方法的栈区分配了一个变量p。
3:在堆内存中开辟一个实体空间,分配了一个内存首地址值。new
4:在该实体空间中进行属性的空间分配,并进行了默认初始化。
5:对空间中的属性进行显示初始化。
6:进行实体的构造代码块初始化。
7:调用该实体对应的构造函数,进行构造函数初始化。()
8:将首地址赋值给p ,p变量就引用了该实体。(指向了该对象)
继承
好处:
1:提高了代码的复用性。
2:让类与类之间产生了关系,提供了另一个特征多态的前提。

父类的由来:其实是由多个类不断向上抽取共性内容而来的。
java中对于继承,java只支持单继承。java虽然不直接支持多继承,但是保留了这种多继承机制,进行改良。

单继承:一个类只能有一个父类。
多继承:一个类可以有多个父类。
抽象类: abstract
抽象:不具体,看不明白。抽象类表象体现。
在不断抽取过程中,将共性内容中的方法声明抽取,但是方法不一样,没有抽取,这时抽取到的方法,并不具体,需要被指定关键字abstract所标示,声明为抽象方法。
抽象方法所在类一定要标示为抽象类,也就是说该类需要被abstract关键字所修饰。

抽象类的特点:
1:抽象方法只能定义在抽象类中,抽象类和抽象方法必须由abstract关键字修饰(可以描述类和方法,不可以描述变量)。
2:抽象方法只定义方法声明,并不定义方法实现。
3:抽象类不可以被创建对象(实例化)。
4:只有通过子类继承抽象类并覆盖了抽象类中的所有抽象方法后,该子类才可以实例化。否则,该子类还是一个抽象类。

Object:所有类的直接或者间接父类,Java认为所有的对象都具备一些基本的共性内容,这些内容可以不断的向上抽取,最终就抽取到了一个最顶层的类中的,该类中定义的就是所有对象都具备的功能。

具体方法:
1,boolean equals(Object obj):用于比较两个对象是否相等,其实内部比较的就是两个对象地址。
而根据对象的属性不同,判断对象是否相同的具体内容也不一样。所以在定义类时,一般都会复写equals方法,建立本类特有的判断对象是否相同的依据。
    public boolean equals(Object obj){
        if(!(obj instanceof Person))
            return false;
        Person p = (Person)obj;
        return this.age == p.age;
    }
2,String toString():将对象变成字符串;默认返回的格式:类名@哈希值 = getClass().getName() + '@' + Integer.toHexString(hashCode())
    为了对象对应的字符串内容有意义,可以通过复写,建立该类对象自己特有的字符串表现形式。
    public String toString(){
        return "person : "+age;
    }
3,Class getClass():获取任意对象运行时的所属字节码文件对象。
4,int hashCode():返回该对象的哈希码值。支持此方法是为了提高哈希表的性能。

通常equals,toString,hashCode,在应用中都会被复写,建立具体对象的特有的内容。


当内部类定义在外部类中的成员位置上,可以使用一些成员修饰符修饰 private、static。
1:默认修饰符。
直接访问内部类格式:外部类名.内部类名 变量名 =  外部类对象.内部类对象;
Outer.Inner in = new Outer.new Inner();//这种形式很少用。
    但是这种应用不多见,因为内部类之所以定义在内部就是为了封装。想要获取内部类对象通常都通过外部类的方法来获取。这样可以对内部类对象进行控制。
2:私有修饰符。
    通常内部类被封装,都会被私有化,因为封装性不让其他程序直接访问。
3:静态修饰符。
    如果内部类被静态修饰,相当于外部类,会出现访问局限性,只能访问外部类中的静态成员。
    注意;如果内部类中定义了静态成员,那么该内部类必须是静态的。

内部类编译后的文件名为:“外部类名$内部类名.java”;

为什么内部类可以直接访问外部类中的成员呢?
那是因为内部中都持有一个外部类的引用。这个是引用是 外部类名.this
内部类可以定义在外部类中的成员位置上,也可以定义在外部类中的局部位置上。
当内部类被定义在局部位置上,只能访问局部中被final修饰的局部变量。

体现:父类引用或者接口的引用指向了自己的子类对象。//Animal a = new Cat();
多态的好处:提高了程序的扩展性。
多态的弊端:当父类引用指向子类对象时,虽然提高了扩展性,但是只能访问父类中具备的方法,不可以访问子类中特有的方法。(前期不能使用后期产生的功能,即访问的局限性)
多态的前提:
    1:必须要有关系,比如继承、或者实现。
    2:通常会有覆盖操作。

多态的出现思想上也做着变化:以前是创建对象并指挥对象做事情。有了多态以后,我们可以找到对象的共性类型,直接操作共性类型做事情即可,这样可以指挥一批对象做事情,即通过操作父类或接口实现。

class 毕姥爷{
    void 讲课(){
        System.out.println("企业管理");
    }
    void 钓鱼(){
        System.out.println("钓鱼");
    }
}
class 毕老师 extends 毕姥爷{
    void 讲课(){
        System.out.println("JAVA");
    }
    void 看电影(){
        System.out.println("看电影");
    }
}
class {
    public static void main(String[] args) {
        毕姥爷 x = new 毕老师(); //毕老师对象被提升为了毕姥爷类型。
//        x.讲课();
//        x.看电影();  //错误.
        毕老师 y = (毕老师)x; //将毕姥爷类型强制转换成毕老师类型。
        y.看电影();//在多态中,自始自终都是子类对象在做着类型的变化。
    }
}
instanceof
如果想用子类对象的特有方法,如何判断对象是哪个具体的子类类型呢?
可以可以通过一个关键字 instanceof ;//判断对象是否实现了指定的接口或继承了指定的类

格式:<对象 instanceof 类型> ,判断一个对象是否所属于指定的类型。
Student instanceof Person = true;//student继承了person类


39 个回复

倒序浏览
                           
回复 使用道具 举报
我感觉我写的还不算太透彻
回复 使用道具 举报
不要着急我还有很多东西没发出来呢
回复 使用道具 举报
好的吧  我承认我的帖子不够吸引人  
回复 使用道具 举报
我一定会更新的即使没有人给我评论 我也会自己在这一直默默支持者我自己
回复 使用道具 举报
我一定会更新的即使没有人给我评论 我也会自己在这一直默默支持者我自己
回复 使用道具 举报
我一定会更新的即使没有人给我评论 我也会自己在这一直默默支持者我自己
回复 使用道具 举报

哥们能多来几条吗
回复 使用道具 举报
其实不用担心的,你写的挺好,如果只为了让更多人看到的话, 你可以分三次发这个,每次不要太长,因为很多看的会审美疲劳。虽然我写帖子有时候写起来也很长。。支持自己,挺好的!早点休息!
回复 使用道具 举报
lvcj 中级黑马 2015-10-9 23:01:56
11#
面向对象特点:更符合人们的思考习惯
回复 使用道具 举报
好牛气!!果然是大神!!
回复 使用道具 举报
果然是大神!厉害!
回复 使用道具 举报
果然是大神!厉害!
回复 使用道具 举报
蒽蒽,,,总结的不错,,给个赞,,,
回复 使用道具 举报
哈哈,我看的后面的部分,从线程那儿开始的,前面的部分以前学过都忘的差不多了,不过后面复习一下就行啦
回复 使用道具 举报
Meitan 中级黑马 2015-10-10 17:46:08
17#
感觉好多啊
回复 使用道具 举报
嗯嗯,不错
回复 使用道具 举报
ma5074 中级黑马 2015-10-10 21:34:06
19#
总结的蛮全面的  赞
回复 使用道具 举报
大神谢谢分享~写的挺详细~萌萌哒~
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马