黑马程序员_面向对象

 ---------------------- <a href="http://edu.csdn.net/heima" target="blank">android培训</a>、<a href="http://edu.csdn.net/heima" target="blank">java培训</a>、期待与您交流! ----------------------

1、面向对象的三大特征:封装、继承、多态。

2、“=”运算符与equals()方法的区别:

对于同样的两个对象,利用“==”运算符和equal函数来对对象进行比较,往往会有不同的结果。

例如String是Java自定义的对象,其主要用来存储字符串数据,下面定义了三个string对象。

String str1=new String(“abc”); //创建一个对象,利用abc初始化
String str2=new String(“abc”); //创建一个对象,利用abc初始化
String str3=str1; //创建一个对象,并利用对象str1的地址赋值

      以上三个对象,显而易见,其内容都是相同的。但是利用这个两种方式来对他们进行比较的时候,往往会有不同的结果。如利用“==”比较符号来进行比较,str1==str2,最后返回的结果是false,也就是他们是不相同的对象。可是如果比较str1==str3对象,则最后返回的结果却是true。但是利用equal函数来比较,则返回的结果是相同的。为什么对象的内容相同,它们返回的结果却是不同的呢?

      要回答这个问题,就需要先回顾一下上面谈到的几对关系。首先,对象str1与对象str2的关系,就好像是同一个模具出来的两个盒子,他们从外观看起来虽然相同,但是通过放大镜或者其他精密仪器仍然可以看到,两个盒子是不同的东西。这两个对象虽然内容相同,但是其在内存中分配的地址不同。也就是说,是同一个模具出来的外观看起来相同的不同的盒子。而对象str1与对象str3就好像是一个人有两个名字。虽然名字不同,但是实际上是同一个人。这主要是因为他们的身份证号码相同。其实这个身份证号码就好像是内存中发配的地址,而对象名字就好象是人的名字。一个人可以有好几个名字(一个对象有好几个名字),但是其身份证号码只有一个(内存分配地址只有一个)。在上面的语句中,通过str3=str1,其实现的功能,并不是将对象str1的值赋值给对象str3。而是将对象str1在内存中的地址赋值给了对象str3(就好像是将一个人的身份证号码复制给了另外一个人)。所以从本质上说,str3并不是一个新建立的对象。因为系统并没有在内存中为其分配一个新的存储区域(即并没有创造一个新的人),而只是好像给对象另外取了一个别名。

      所以说,在对象比较的时候,需要搞清楚一个问题。即现在要比较的是他们的内容还是在内存中指向的地址。一般来说,内容相同不一定他们在内存中指向的地址也是相同的。而不同的对象在内存中若指向同一个地址,则他们的内容肯定是相同的(因为他们实际上就是同一个对象)。而“==”运算符与 equal函数就是运来比较这两块内容的。其中“==”运算符是用来比较内存中的地址是否相同,即比较它们的身份证号码是否相同。而equal函数则只比较他们的内容。如果他们的内容相同,即使身份证号码不相同(内存中的地址不同),这个函数也是相同的,会返回true值。这就是这个两个对象比较方式的最大不同。或者说,他们在对对象进行比较时,出发点不同。一个比较对象名字所指向的内存地址是否相同,另外一个比较的时对象名字所指向的存储模块中的内容是否相同。所以他们就会返回不同的结果。

3、实现类的封装性:在定义一个类的成员(包括变量和方法)时,使用private关键字说明这个成员的访问权限,这个成员成了类的私有成员,只能被这个类的其他成员方法调用,而不能被其他的类中的方法所调用。

4、构造函数

构造方法的特性:它具有与类相同的名称,它不含返回值,它不能在方法中用return语句返回一个值。注意:在构造方法里不含返回值的概念是不同于“void”的,在定义构造方法时加了“void”,结果这个方法就不再被自动调用了。 

5、this关键字的作用:

this关键字只能在方法内部使用,表示"对调用方法的那个对象"的引用。this的用法和其他对象的引用并无不同,但要注意,如果在方法内部调用同一个类的另一个方法,就不必使用this,直接调用即可。当前方法中的this应用会自动应用于同一类中的其他方法。this关键字对于将当前对象传递给其他方法很有用,可用this关键字在一个构造器中引用另一个构造器,避免代码重复。

另外this就是调用当前的类,虽然不使用它也可以,但使用它能使代码更容易阅读。比如说
public class test{
      private String a;
      public void setA(String a){
            this.a = a;//在这里,调用this能够很容易区分哪个是传进来的变量哪个是该类的变量
      }
}

6、static关键字

有时你希望定义一个类成员,使它的使用完全独立于该类的任何对象。通常情况下,类成员必须通过它的类的对象访问,但是可以创建这样一个成员,它能够被它自己使用,而不必引用特定的实例。在成员的声明前面加上关键字static(静态的)就能创建这样的成员。如果一个成员被声明为static,它就能够在它的类的任何对象创建之前被访问,而不必引用任何对象。你可以将方法和变量都声明为static。static 成员的最常见的例子是main( ) 。因为在程序开始执行时必须调用main() ,所以它被声明为static。
声明为static的变量实质上就是全局变量。当声明一个对象时,并不产生static变量的拷贝,而是该类所有的实例变量共用同一个static变量。声明为static的方法有以下几条限制:
它们能调用其他的static 方法。
它们只能访问static数据。
它们不能以任何方式引用this 或super
7、Java只支持单继承,不允许多重继承。

8、子类的对象可以赋值给父类的引用,但父类的对象不可以赋值给子类的引用。若把子类的对象赋值给父类的引用,父类的引用会丢失子类新增的方法。

9、继承性的特点:

子类的对象可以赋值给父类的引用;

父类的引用会丢失子类新增的属性与方法;

如子类中覆盖了父类的方法,则父类的引用调用的仍为子类中覆盖后的方法。

10、子类可以隐藏从父类继承的成员变量与方法,如果在子类中想使用被子类隐藏的变量或方法,就可以使用关键字super。

11、利用多态设计程序有很大的好处,可以体现程序设计的所谓“开-闭”原则,“开-闭”原则强调一个程序应当对扩展开放,对修改关闭,增强代码的可维护性。

12、Java不支持多继承性,即一个类只能有一个父类。单继承性使得Java简单,易于管理程序。为了克服单继承性的缺点,Java使用了接口,一个类可以实现多个接口。使用关键字interface来定义一个接口,接口的定义和类的定义很类似,分为接口的声明和接口体。

---------------------- <a href="http://edu.csdn.net/heima" target="blank">android培训</a>、<a href="http://edu.csdn.net/heima" target="blank">java培训</a>、期待与您交流! ----------------------

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值