java学习_04_面向对象编程思想-类

博客内容仅作学习交流之用,详细内容参见网络资源,欢迎大家交流探讨!

 

计算机语言发展向接近人的思维方式演化:
汇编语言     面向机器
C语言          面向过程
C++           基于对象
java             面向对象
AOP           面向切面编程

代码感与程序内存思想

 

1.类的定义

package 包名;

class 类名 extends 父类 implements 接口名 {

   成员变量;//基本变量,引用对象

   构造方法;//方法名同类名,没有返回值,创建类时自动调用

   成员方法;//对象的行为

}

       类实际上是定义了一个模板。一个java文件中可以定义很多类,但只有一个可以定义为public的。

       默认构造方法是Java语言的一种语法,是指没有参数的构造方法,可以分为2种:隐含的、程序中显式定义的。在java语言中,每个类至少有一个构造方法。如果程序中没有显式定义任何构造方法,那么java语言将自动提供一个隐含的默认构造方法。只要程序中已经显式定义了构造方法,那么java语言将不再提供隐含的默认构造方法,显示构造方法覆盖了隐式构造方法。
       如果子类的构造方法中没有显式地调用父类构造方法,也没有使用this关键字调用其他重载构造方法,那么在生成子类的实例对象时,系统将默认调用父类无参数的构造方法。

      默认构造函数将所有的变量设为0,所有的Boolean变量设为false,所有的对象变量设为null。

      java中可以在构造函数中调用其他的构造函数,this(参数列表);
      而调用父类的有参构造函数(无参的构造函数自动调用?),需要使用super关键字,并放在该方法的第一个语句处。

 

2.类的创建:先声明再创建;或一步到位。

3.java垃圾自动回收机制,C++程序员需要在各自的函数内自行编写代码回收占用内存。

4.java函数运行原理,开辟栈空间。函数重载,函数参数列表需要有区别。减少中间变量,避免函数啰嗦。

5.函数的声明,没有函数定义中的函数体。

6.this,指对象的...是属于一个对象的为不是类的,只能在类定义中使用。

   instanceof运算符,对象类型转换。例如:

            if(animal instanceof Tiger)

                    ((Tiger)animal).tigerRun();

              else

                      animal.run();

 

7.类变量是该类的所有对象共享的变量,静态变量static,可被该类下的所有对象使用。访问:类名.类变量名,对象名.类变量名。

8.类方法是该类的所有对象共享的方法,静态区域块,只执行一次,在创建类时,写入代码区。java中的规则,类变量原则上用类方法访问,类方法中不能访问非静态变量/非类变量。反之可以,即普通的成员方法可以访问静态变量。

      规范的访问方法,用类来访问,增加程序的可读性。

      总结,加上static称为类变量或静态变量,否则称为实例变量。类变量是与类相关的,公共属性,而实例变量属于每个对象个体的属性。类变量可以通过类名.类变量名直接访问。类方法相似。

 

9.方法重载与覆盖
①方法重载(overload)

 方法名相同;方法的参数类型,个数,顺序至少有一项不同;方法返回类型可以不同,控制访问修饰符可不同,但不构成重载。
②方法覆盖/重写(override)
 子类的一个方法和父类的某个方法的名称、返回类型、参数一样。子类方法不能缩小父类访问权限,反之则可以,即可以扩大访问权限。

 

10.包(package):区分相同名字的类;方便管理类;访问范围的控制。打包命令,文件开头:package包名。常用包:java.lang.*(自动导入),引入包命令:import 包名。

 

11.java面向对象编程的特征:
 ①抽象:模型(模板);
 ②封装:抽象出来的数据和对数据的操作(方法),数据被保护在内部,只有被授权的操作(成员方法)才能操作。封装性,通过访问控制符实现。

     访问控制修饰符,public公有的,private私有的,protected保护的,默认的。

java访问控制符


     继承和组合技术,继承是“is-a”的关系,组合是“has-a”的关系。
     父类的成员变量也可以被子类覆盖,即父类的该成员变量被隐藏,可以通过关键字super调用。  

③继承:代码复用,编程靠近人类的思维。

    子类(派生类)不再重新定义父类中的某些属性或者方法,public,protected可以被继承,private不可被继承。形式:class子类 extends 父类,层次关系。
    子类最多只能继承一个父类(单继承),即不能多重继承(C++),但可以通过接口来实现;
     java的所有类都继承自Object(java.lang.Object);
    JDK6中有个202包,3777个类、接口、异常、枚举、注释和错误;
    API帮助文档和搜索引擎。
 ④多态:一个引用(类型)在不同情况下的多种状态,通过指向父类的指针来调用在不同子类中实现的方法。实现:继承和构建接口,多态,方法的覆写和重载都可以看作是多态。 java允许父类的引用变量引用它的子类的实例(对象)。

 

12.抽象类、抽象方法:abstract,解决父类方法的不确定性。在子类中必须实现父类的抽象部分,抽象方法无实现方法的函数体。抽象类不能被实例化,因为其中有为确定的因素(或者编译器只认类名前得abstract关键字)。抽象类可以不包含抽象方法,可以包含有函数主体的方法,但包含抽象方法的类必须是抽象类。

 

13.接口(interface),就是给出了一些没有内容的方法,封装到一起,到某个类要使用的时候,再根据具体情况把这些方法写出来。类在实现(implememts)接口时需要实现接口中的所有方法。和类得继承情况类似,接口可以引用实现了该接口的类的对象。其体现了程序设计多态和高内聚低耦合的设计思想。不破坏继承关系,扩展了类的属性和行为。
      接口不能被实例化(更加抽象的抽象类);

       所有方法均不能有方法体/主体({},没有主体的方法例如:publicvoid action(););

       一个类可以实现多个接口,以逗号隔开;

      接口中的方法全部为抽象方法,无构造方法。
      接口也被保存为.java文件,文件名与接口名一致。

      接口不能继承类,但可以继承其他接口;

      如果类不是抽象类,它必须实现接口中的定义的所有方法。

      接口的修饰符只能为默认的(无修饰符)或者public。当修饰符是默认时,接口是包可见的;
      接口内可以声明变量,其被自动设置为公有的(public)、静态的(static)、最终的(final)字段,所以在开发中,将全局变量放在接口中,可以通过接口访问;
      实现接口类中的方法必须声明为public,因为在接口中方法都被定义为public,根据继承的原则,访问范围只能放大,不能缩小。接口之间可以有继承关系;
      同抽象类一样,接口不可以被实例化,但是可以声明接口类型的变量,它的值必须是实现了该接口的类的对象,及抽象类和接口都可以用来存放或是实现类得对象。

14.前期绑定:编译时就可以确定数据的类型,static,final;
后期绑定:程序执行时才可以确定数据的类型,即动态绑定是指在执行期间(非编译期)判断所引用对象的实际类型,根据其实际的类型调用其相应的方法,在子类中调用父类的方法。

 

15.final修饰方法,表示该方法不可(被子类)修改/覆盖;修饰变量,不可被修改(常量,必须赋初值);修饰类,不可被继承。

 

16.对象克隆,在Object类中定义了一个clone方法,它创建并返回一个对象的副本,在类得使用语句是:super.clone();但是其得到的是一个Object类,需要进行类型转换,而且在使用时还需要实现Cloneable接口,并把clone方法定义为public。浅克隆问题,clone是Object类提供的方法,Object并不知道具体类实现细节,它只是按照字段进行拷贝,对于可变对象,其获得的只是对象的地址,所以原对象和克隆出来的对象中存放的地址依然指向了同一块内存。虽然String作为类(对象)出现,但是由于String的不可变性,可隆时String不会产生浅克隆问题。

       另外,Object还有两个重要的方法,equals(),toString()。

       public boolean equals(Object obj){

               return (this==obj);

       }

Object中的equals()方法,当且仅当两个对象指向同一个对象(内存地址?)的时候才会返回真值。

 

17.内部类,定义在宿主类内部,指能由宿主类使用,可以控制类的可见性。分为静态内部类和非静态内部类。
非静态内部类可以调用其宿主类得所有变量和方法,并且像宿主类得其他非静态成员那样直接访问。静态内部类时用static修饰的类,静态内部类不能直接访问其宿主类得成员,而必须经过对象来访问。
      对于宿主类访问内部类的成员变量,静态内部类的静态变量可以直接用“类名.变量名”来调用,对于静态类内部的非静态变量则要生成它的对象,利用对象来访问。非静态内部类中不包含静态变量,所以必须使用非静态内部类的对象来访问。
       定义在类中的变量称为成员变量,定义在方法中的变量称为局部变量。内部类也可以定义在方法中,称为局部内部类。
        匿名内部类,没有类名的内部类,省去类得名字,直接构造对象。?


/**
 *站在巨人的肩上才能看得更远,一步一个脚印才能走的更远。分享成长,交流进步,转载请注明出处!
 */

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值