java中面向对象,继承,封装,多态等学习总结

来源:互联网 发布:mac touch bar fn 编辑:程序博客网 时间:2024/06/05 10:44
面向对象编程
它将对象作为问解决问题的基本元素, 利用对象和对象之间的相互作用来设计程序。


面向对象思想把整个世界看成由各种对象来组成的。这些对象具有属性和行为(方法)




对象:一组属性和行为构成


类:类是一个模板,它描述一类对象的行为和状态


类和对象的关系:类是对象的类型(引用),对象是类的实例
属性:对象具有的各种特征
行为:对象执行的各种操作
注意:属性在类中是全局变量,因为可以在该类中被任何方法访问




类中成员变量的定义


成员变量的类型可以使用Java语言中的任何一种数据类型(包括基本类型和引用类型)
在定义成员变量时可以对其进行初始化。如果不对其初始化,Java会使用默认的值对其进行初始化。
引用类型的值为null

成员变量的作用域是整个类体




局部变量和成员变量
成员变量:又称全局变量直接在类中定义
局部变量:在使用前需要赋值,仅限于定义它的方法,在该方法外无法访问它


注意:


(1)  在同一个方法中,不允许有同名的局部变量。在不同的方法中,可以有同名的局部变量
(2) 局部变量可以和成员变量同名,并且在使用时,局部变量具有更高的优先级




对象的产生和使用
对象的声明有3种形式
(1)类名 对象名=null
(2)类名 对象名=new 类名();
(3)new 类名();
区别:第一种情况下,只用有栈内存,没有堆内存(即还没有为成员变量等开辟内存)
      第一种情况,栈内存中存放的是对象名,堆内存中存放的是对象内容,
      第三种情况,只有堆内存,没有栈内存,即没有对象指向这片堆内存
注意:垃圾就是在程序开发之中没有任何对象指向的一块堆内存空间,这空间就成为垃圾,
所有的垃圾都将等待GC不定期的回收与空间的释放,第三种情况下开辟的堆内存就是垃圾  




构造方法
构造方法的名字和类名相同,并且没有返回值,并且不要加void。


构造方法的作用在于构造并初始化对象。
每个类中都至少包含一个构造方法。


两种构造方法
 :默认构造方法,
带参构造方法
默认构造方法: 就是指不带参数的构造方法
Java的类都要求有构造方法(至少包含一个),如果没有定义构造方法,Java编译器会为我们提供一个默认的无参构造方法。 


如果类中有一个自己编写的构造方法时,编译器就不会为我们再提供那个默认构造方法


This关键字
this引用存在于每个类的每个非静态方法,它指向调用这个方法的对象(当前对象)。


this可以看作是一个变量,它的值就是当前对象的引用
this关键字-用法一
必须明确地使用this关键字来指定成员变量
this关键字-用法二
如果某个构造方法的第一条语句具有形式this(...),那么这个构造方法将调用本类中的其他构造方法。
注意:只能用于构造方法的第一条语句,且只能在同类的另一个构造方法中




static关键字
用static声明的成员变量为静态成员变量,它是该类的公用变量,对于该类的所有对象来说,static成员变量只有一份。
用static声明的方法为静态方法,该方法独立于类的实例,所以也叫类方法。
注意:静态方法中只能直接调用本类中其他的静态成员(变量和方法)。
      静态方法中不能使用this和super关键字。
      静态成员可以通过类名(不需要实例化)或类的实例去访问
      静态成员变量和静态方法先于类的对象存在,类被JVM载入时, 静态成员变量和静态方法随着类的存在而存在
      static不能修饰局部变量




static静态代码块


在类中可以使用不包含在任何方法中的静态代码块(static block),当类被JVM载入时,
静态代码块被执行,且只被执行一次。
静态代码块经常用来初始化类的静态成员变量


static{
        // 静态代码块内容
   }
注意:类中的静态变量也可在定义时初始化,存储在静态存储区的变量会在程序刚运行时就完成初始化,也是唯一一次
      共有两种变量存储在静态存储区:全局变量和静态变量
       static静态代码块不属于某个方法,只被执行一次,且不能访问非static成员,它的存在同静态方法和静态成员变量一致




封装性体现


类的封装(属性、方法都存在于某个类中)


对字段的封装
 1字段设置为私有(private)
 2添加get /set 方法
 
访问修饰符的限制,保证数据的安全
注意: 类不能为private,一般不会私有化方法(会有私有构造方法)






单例设计模式  
定义:某个类只有一个实例化对象
实现:1.私有化构造方法
  2. 在类的内部实例化该类的对象3.该类的对象必须是static全局变量
“饿汉式”单例模式:当类加载到JVM时,单例对象直接创建;


懒汉式”单例模式:当类加载到JVM时,并不直接创建单例对象,用户请求单例对象时(用户需要使用时),才实例化该单例对象




继承性


类的方法和属性可以被继承


私有的属性和方法不能被继承


构造方法不能被继承


在java中一个类只能有一个父类,这就是Java的“单继承性”。


java.lang.Object类是所有类的父类。




super关键字
在Java类中使用super来引用父类的成员,
super可用于访问父类中定义的属性


super可用于调用父类中定义的成员方法,super(…)可用于在子类构造方法中调用父类的构造方法


super只能应用在成员方法和构造方法中,不能应用在静态方法中(和this是一样的)
  
 如果在构造方法中使用必须放在第一行
  , 在构造方法中this()和super()不能同时出现


注意:类构造方法中没有super(),则调用父类无参构造
而父类中没有无参构造,编译错误






访问权限


类的访问修饰符


public:任何包中的类都可以访问该类  ,
默认值:同一个包中的类可以访问该类


成员的访问修饰符


private:只对本身类可见
默认值:对同一包中的类可见,
protected:对跨包的子类和同一包中的类可见,
public:对一切类可见
注意:protected不能修饰一个类


      如果子类中成员变量、静态变量、静态方法 和父类中成员变量、静态变量、静态方法相同,
      这种情况不是重写,可以认为是隐藏,只有非static成员方法之间才是重写




隐藏


子类重新定义一个与父类那里继承来的域变量完全相同的变量,称为域的隐藏。


隐藏是指子类拥有了两个相同名字的变量,一个继承自父类,另一个由自己定义。
当子类执行父类的方法时,处理的是父类的变量,而当子类执行它自己定义的方法时,所操作的就是它自定义的变量,而把继承自父类的变量“隐藏”起来了。
阅读全文
0 0
原创粉丝点击