面向对象程序设计(一)

(1)基础:一个Java文件中至多有一个public类,且文件名要和public类名相同。若没有public类,则文件名可以和任一个类名相同。

垃圾回收机制:若一个实例对象没有任何引用指向,那么它所占的内存就会成为垃圾,但JVM一般不会立即回收,会在适合的时机回收垃圾,不保证先申请就先回收,也不保证先成为垃圾就先回收。若要想手动回收可以点用System.gc()方法,这样会调用类的finalize()方法,而系统在程序执行完回收则不会调用。

(2)继承:三大特性之一,一个类最多继承一个直接父类。

super()和this()方法:super()在子类的构造函数中调用,用于初始化类成员,必须写在构造函数第一句,若不含任何参数,则可以省略不写。值得注意,若父类没有构造函数,会创建一个默认的无参构造函数;若父类只有有参数构造函数,则默认构造函数不会产生,那么子类必须显示调用super且必须含参数;

  隐式调用/super()无参 super()有参
有无参构造函数/没有构造函数 正确 错误
有有参构造函数 错误 正确
都有 正确 正确

而this()方法也是在构造函数中出现,必须写在第一行,所以与super()无法同时使用,用于调用其他重载构造方法。

上转型隐式调用:将子类对象复制给父类对象时成为上转型(upcasting),例如子类Square继承父类Shape,可以将父类的引用指向子类的对象,例如:Shape sh=new Square();

下转型显式调用:接上面语句,Square sq=(Square)sh;称为下转型(dwoncasting),但不能直接使用这句,因为只有sh在指向子类对象时才能下转,否则编译不会出错,但运行会出错。

instanceof:判断对象是否是某类的实例,对于没有转型来说,子类是所有超类及自身的实例,返回true,例如Square sq=new Square();则sq instanceof Square,sq instanceof Shape乃至sq instanceof Object都返回true;而父类不会是子类的实例,例如Shape sh=new Shape();sh instanceof Shape 返回true,但sh instanceof Square返回false;

对于上转型来说,父类便是子类的对象,例如 Shape sh=new Square();那么sh instanceof Square返回true;或者 Square sq=new Square(); Shape sh=sq;则sh instanceof Square,sh instanceof Shape,sq instanceof Square,sq instanceof Shape全都返回true;

对于下转型来说,由于父类肯定是上转型,所以不在讨论,子类与没有转型来说是相同的。

(3)多态:面向对象三大特征之一,分为静态多态,动态多态(即C++中的静态联编和动态联编)

静态多态:即重载(overload),方法的名称相同但参数不同,例如各个构造函数。注意参数类型相同但参数名不同不算重载,仍是相同的函数。

动态多态:即覆盖(override),指父类和子类方法参数类型和方法名完全相同,但JVM会识别出是哪一个调用。子类对象则调用子类方法,父类对象调用父类方法,上转型的父类调用子类方法,下转型的子类也调用子类方法。

super和this关键字:注意和前面super(),this()方法不相同,super可以使用在子类中非静态成员方法中用于访问父类型的成员,this用法与super相同,都是super.a,this.b,super.A(),this.B()形式,但是要调用本类的成员,主要用于区分局部变量和成员域(同名时),例如在很多set方法中都会有this.a=a类似的语句。

此外静态方法不具有动态多态性。

(4)包:包关键字package,必须是文件的第一句;

导入包语句有三种分别是:

import  wym.*;将整个wym包里的接口、类、枚举都导入。不会导入子包的类型。

import wym.Eat;将wym包中的Eat类型(接口、类、枚举其中之一)导入。

import static wym.Eat.main;将main静态方法导入。

第一种会增加程序开销,降低编译效率,尽量使用后两种。

(5)封装:三大特性之一

类的访问控制方式:pulic和默认(即什么修饰词也不加),public的类可以被所有包使用(不同包需要用import导入,在同一包中可见),而默认类只能被包内使用(在同一包中可见)。

类成员访问控制方式:四种类型public,protected,默认,private。

对于public的类成员,所有能够访问该类的类型定义体都能访问访问该成员。

对于protected的类成员,若所在类是默认模式,则其他包的成员不能访问,若所在类是public,比default多了其他包的子类方法能够访问。

对于默认的类成员,同一软件包能够访问,但是不同包一定不能访问。

对于private的类成员,只有本类成员方法才能访问。

所在类为public时的权限:

访问控制模式 在同一类内 在同一包内 子类 所有类
公共 允许 允许 允许 允许
保护 允许 允许 允许  
默认 允许 允许    
私有 允许      

所在类为默认时的权限:

访问控制模式 在同一类内 在同一包内 子类 所有类
公共 允许 允许    
保护 允许 允许    
默认 允许 允许    
私有 允许      

猜你喜欢

转载自www.cnblogs.com/lbrs/p/8903673.html