黑马程序员技术交流社区

标题: 简述面向对象关键字的使用和区别? [打印本页]

作者: 朱玉祥    时间: 2013-6-5 18:04
标题: 简述面向对象关键字的使用和区别?
本帖最后由 孙百鑫 于 2013-6-22 00:52 编辑

例如Static abstract  final private 等等。。。
作者: 王瀛    时间: 2013-6-5 18:24
就这样直白的说,略不好说,就说个大概吧。

static是静态。类中被静态修饰的内容随着类的加载而存在于方法区中。如果一个数据是共享数据,一般使用静态修饰符修饰(如:一个班级共用一台饮水机)。
静态方法只能调用静态成员。

abstract是抽象修饰符。一个方法如果只定义了方法名而没有具体实现方法主体,则被abstract修饰。一个类中如果有抽象方法,该类必须被声明是抽象类。子类继承抽象父类或者接口后,必须复写抽象方法,并以不低于父类对应方法权限的修饰符修饰。

final是终极,最终。被final修饰的类是最终类,该类不可被继承。被final修饰的方法不可被子类复写。被final修饰的变量只能被赋值一次,是常量

在接口(interface)中,所有的方法默认修饰符是 public abstract,变量的默认修饰符是 public static final

private是权限修饰符的一种,表示私有、专用。被private修饰的方法或者变量,外界无法直接访问,一般在类中会定义set或者get方法对其进行设置和获取。父类被private修饰的方法,子类是不可能复写的。

其他权限修饰符有public protacted default private
                        public                    protected                default                private
同一个类中                  ok                        ok                          ok                           ok
同一个包中                  ok                        ok                          ok                          
子类                          ok                        ok
不同包中                  ok


作者: 夜默    时间: 2013-6-5 18:27
private  私有 权限修饰符  
用于修饰类中的成员(成员变量,成员函数)只有在本类中有效。
                私有仅是封装的一种表现形式
        对外提高访问方式,可以在访问方式中加入逻辑判断等语句
对访问的数据进行操作,提高代码的健壮性。

static 静态关键字  修饰成员(成员变量、成员函数)
修饰之后成为 类变量
静态修饰内容被对象共享 节省空间  但生命周期过长  访问出现局限性 只能访问静态
被静态修饰后,出了被对象调用后,还可以直接用类名.静态成员调用
  特点:随着类的加载而加载  生命周期长
                优先于对象存在
                被所有对象所共享
                可以直接被类名所调用
实例变量和类变量的区别
        1.存放位置   类变量随着类的加载而存在于方法区中
                                实例变量随着对象的建立而存在于堆内存中
        2.生命周期  
                                类变量随着类的消失而消失 生命周期长
                                实例变量随着对象的消失而消失  生命周期短
注意事项:
                1.静态方法只能访问静态成员,.非静态方法都可以访问
                2.静态方法中不可以定义this、super关键字
                                静态优先于对象存在,所以静态方法不可以出现this
                3.主函数是静态的
静态的应用
        对象中出现共享数据时,该数据被静态所修饰
        对象中的特有数据要定义成非静态存在于对内存中
        功能内部没有访问到非静态数据(特有数据),则该功能定义成静态的
        将共性的功能抽取,独立封装,以便复用
如果不需要对象,也没有特有数据,可以将方法定义成static,直接通过类名调用即可,将构造函数私有化,则不能建立该类的对象  达到封装的目的
extends  继承关键字
        1.提高了代码的复用性
                2.让类于类产生了关系,才有了多态的特性
注意:        千万不要为了获取其他类的功能,简化代码而继承。必须是类于类之间具有所属关系才可以继承。
final  最终 修饰符
1.        修饰类、方法、变量
2.        被final修饰的类不可以被继承  打破了封装性  为了避免被继承,被子类复写功能
3.        被final修饰的方法不可以被复写
4.        被final修饰的变量是一个常量只能赋值一次,既可以修饰成员变量,又可以修饰局部变量。 一些数据的出现值是固定的,例如π,为了增强阅读性,就给这些值起个名字,方便阅读,被final修饰,这个值就不能改变了.
抽象类:  adstract 关键字   抽象类不可以实例化
抽象类中可以不定义抽象方法,这样做仅仅是不让该类建立对象。  不多见
1.        抽象方法一定在抽象类中
2.        抽象方法和抽象类都必须被adstract关键字修饰
3.        抽象类不可以用new创建对象,因为调用抽象方法没意义
4.        抽象类中的抽象方法要被使用,必须由子类复写所有的抽象方法后,建立子类对象调用
如果子类值覆盖了部分抽象方法,那么该子类还是一个抽象类
抽象方法没有方法主体,也就是大括号。

作者: 张俊迪    时间: 2013-6-5 19:41
王瀛 发表于 2013-6-5 18:24
就这样直白的说,略不好说,就说个大概吧。

static是静态。类中被静态修饰的内容随着类的加载而存在于方法 ...

在不同包中也可以继承父类中的protected修饰的成员变量和方法吧
作者: 夜默    时间: 2013-6-10 10:46
楼主你好  如果帖子的问题已经解决,请把帖子的类型改为“已解决”。

作者: 孙百鑫    时间: 2013-6-22 00:51
楼主您好~帖子长时间未作出回答,我已经将您的帖子改成已解决。如果有问题的话可以私密我哦~




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2