zoukankan      html  css  js  c++  java
  • java入门学习(6)—封装,继承,多态,this,super,初始代码块

    1、【封装】:将对象的状态信息隐藏,不允许直接访问,而是通过该类提供的的方法阿里实现内部信息的访问和操作。

          使用到的修饰符:private,不用修饰符(default),protected,public,

    private:当前类访问权限,适合把属性隐藏在类的内部,只能通过方法访问。(一般用来隐藏)

           default:包访问权限,只要自己所属的这包下的其他类都能访问。

           protected:子类访问权限,可以相同包,或者不同包访问。一般用于子类重写。

           public:公共属性,任何类都可以访问。(一般用来暴露)

    注:由此可以解释为什么局部变量不用修饰符?因为其局部变量的作用域已经定了,就在方法,或者代码块内,所以不需要额外的修饰符限定其作用域。

    封装方法:用setter _ _ getter方法进行隐藏的属性的访问。

          用法事列:private String name;//定义一个隐藏的属性

                     public String getName()//语法为:【修饰符】数据类型 get[封装的属性名第一个字母大写]
    {
    return name;                                【返回值和上面的数据类型一样】
    }
    public void setNmame(String name)【注意】:这是设置进去,不需要返回值
    {
    this.name=name;
    }

    2、【包】:引入包提供了类的多层命名空间,用于解决类的命名冲突,类文件管理等问题,【一般公司自己的包名多为公司域名的倒写】

            包名:全部为小写字母;

             语法:package 【包名】

    【注】:1、一个源文件只能指定一个包,同一个包下的类可以自由访问。

    2、当没有用import导入相应的包的时候,在父包中使用子包的类必须使用子包的全名,导入了包之后可以直接使用。

    3、import   java.util.*;这个表示导入util这个包下面的所有类,*号是通配符。

    4、import   static package.packagename.classname;这个是导入这个包的相应的类下面的静态属性。

    5、自己定义包时,使用javac   -d  源程序这个代码来编译时,-d的意思是系统会自动为package生成文件夹,并把生成的类放置在其下,当执行时会自动寻找,当然,子包作为子文件夹。

    3、【继承】:子类通过继承得到父类的全部【属性】和【方法】,【但不能获得父类的构造器】。

            语法:【修饰符】 class 【子类】extends 【父类】

    {//代码块

    }

    【注】:1、一个类只能有一个直接父类,可有无数个间接父类。【单继承】

    2、其实继承就是从一般到特殊的的情况,即:“is a”;如:apple is a fruit。

    3、一切的类都是object类的子类。也即:如果定义的类没有用extends显式继承某个类的话,那么就会默认继承object类。

    4、重写父类方法:a、方法名,形参列表都相同。

                                       b、子类重写的方法的访问权限必须比父类的访问权限更大,或者相等。

       c、子类重写方法的返回值类型必须比父类中方法的返回值类型更小,或者相等。

    【注】:1、重写也叫覆盖,就是子类重写父类的方法后,会覆盖(屏蔽)了父类的方法,当其需要调用的时候用super(参数)【利用参数的不同,找不同的方法】,【但是如果父类方法有private修饰,则无法调用或者重写】。

    2、子类的构造器总会默认的调用父类的构造器一次,相当于是要把父类的相关属性和方法加载到子类上。

    3、加上@override:防止重写父类方法是出错,编译期给出严格的检查,如果不这样,那么只有运行的时候才能抛出异常。

    【相近名字直接的区别】

    a、重载:同一个类的不同方法之间,通过不同的参数定义相同参数名的不同方法的途径。

    重写:发生在子类和父类之间的。

    b、this:发生的调用发生在一个类里面。

    super:发生在子类和父类之间,子类通过此关键字调用父类的初始化代码,属性,或者方法。

    【注】:由于this和super都只能放在方法的第一行,所以不可能同时出现。

    5、多态:java的变量在整个使用的过程中可能会有两个类型,编译时时对应的编译类型,而运行时便由实际赋予的值决定其变量。

           编译时类型:由声明它的变量决定。

           运行时类型:由实际指向(实际赋予)的类型决定。

    6、关键字:【引用类型变量】instanceof 【类,或者接口】判断前面的对象是否是后面类的实例,如果是返回值为true,如果不是返回值为false。

           【注】:1、其操作数的类型,要么与后面的类相同,要么与后面类有继承关系,否则会引起编译错误。

                           2、通常先用instance判断一个对象是否可以强制类型转换,然后再强制类型转换,从而保证程序的正确性。

    7、初始化代码块:对一个类或者一个实例进行初始化。

                         语法:【修饰】  {初始化代码块}  ;注:修饰符只能是static,或者可以省略。

                         特点:没有名字,所以不能被引用,只要创建对象时就会被隐式的执行。

    有无static 的区别:有static是类初始化块,当类加载的时候对类进行初始化,隐式执行(自动执行)。没有static则会在对类创建实例的时候自动执行。

                 何时执行:static修饰的是类一加载就执行,而没有static的是当创建实例时(执行顺序由代码块和构造器的位置决定),若初始化代码块在构造器前面则先执行,再执行构造器里的代码块,反之则先执行构造器里的代码再执行初始化代码块。

  • 相关阅读:
    JS BOM对象 History对象 Location对象
    JS 字符串对象 数组对象 函数对象 函数作用域
    JS 引入方式 基本数据类型 运算符 控制语句 循环 异常
    Pycharm Html CSS JS 快捷方式创建元素
    CSS 内外边距 float positio属性
    CSS 颜色 字体 背景 文本 边框 列表 display属性
    【Android】RxJava的使用(三)转换——map、flatMap
    【Android】RxJava的使用(二)Action
    【Android】RxJava的使用(一)基本用法
    【Android】Retrofit 2.0 的使用
  • 原文地址:https://www.cnblogs.com/liulei-LL/p/8093157.html
Copyright © 2011-2022 走看看