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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 我是刘通 中级黑马   /  2015-10-9 20:39  /  1461 人查看  /  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 个回复

正序浏览
小鹿 中级黑马 2015-10-13 09:09:36
40#
又让我复习了一遍!  谢谢!
回复 使用道具 举报
好吧,顶一个吧..
回复 使用道具 举报
我是刘通 发表于 2015-10-12 20:36
我这真没有灌水  你怎么这样呢   喷子

有点意思,我何时喷你了?喷子?
回复 使用道具 举报
谢谢楼主分享,已经复制粘贴。
回复 使用道具 举报
lingyins 发表于 2015-10-11 09:25
哥们别着急,黑马币没那么重要,别灌水,灌水分分钟给你清零,如果你正在就读基础班,你就每天晚上 上下论 ...

我这真没有灌水  你怎么这样呢   喷子
回复 使用道具 举报
迷茫不堪的年纪 发表于 2015-10-9 22:53
其实不用担心的,你写的挺好,如果只为了让更多人看到的话, 你可以分三次发这个,每次不要太长,因为很多 ...

谢谢你   能加个好友吗  1666874683
回复 使用道具 举报
ma5074 发表于 2015-10-10 21:34
总结的蛮全面的  赞

加个好友行吗  1666874683
回复 使用道具 举报
小馒头的向日葵 发表于 2015-10-9 23:17
好牛气!!果然是大神!!

加个好友行吗 1666874683
回复 使用道具 举报
mark~学到再看,支持下~
回复 使用道具 举报
情深不及久伴 来自手机 中级黑马 2015-10-11 12:09:43
31#
可以,,可以
回复 使用道具 举报
get了。总结的不错
回复 使用道具 举报
哥们别着急,黑马币没那么重要,别灌水,灌水分分钟给你清零,如果你正在就读基础班,你就每天晚上 上下论坛,回复下活动贴,没有就随便回复几个,等你学完了,黑马币不会少的。
回复 使用道具 举报
Rzzz 中级黑马 2015-10-11 02:07:25
28#
总结的不错,学了后面忘了前面...看一遍帖子又全部记起来了    学习就是不断忘记,记忆,忘记的过程...次数多了  印象自然就深了..
回复 使用道具 举报
挺好的,写的
回复 使用道具 举报
神马才是黑马 来自手机 中级黑马 2015-10-10 23:10:26
26#
不错。。。。
回复 使用道具 举报
好棒好棒  
回复 使用道具 举报
不错,赞一个,就是有点长
回复 使用道具 举报
谢谢分享~~~~~~~
回复 使用道具 举报
总结的好全面 , 赞一个
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马