• JAVA类基础


    1.this表示本类, super表示父类

    2.类中函数两个特点:

       (1)重载:同一个类中,用overload

        (2)覆盖:子类中,也称重写,覆写。用override 。子类方法覆盖父类方法时,子类方法权限要大于等于父类方法权限。

     3.看下面的例子,应该输出什么呢?

       class Fu
        {
             Fu()
            {
                 System.out.println('A');
            }
            Fu(int x)
           {
                 System.out.println('B');
           }
        }
       class Zi extends Fu
       {
            Zi()
    
            {
                    System.out.println('C');
            }
            Zi(int x)
    
            {
                  System.out.println('D');
            }
       }
     class Demo
    {
         public static void main(String []args)
         {
               new Zi(6);
         }
    }
    

      答案应该是输出:AD

      因为在每个子类的构造函数的第一行里都会默认执行super(),以执行父类的构造函数。所以输出为AD,而并不是我们想象的BD。如果想要结果输出为BD,则需要我们在Zi类中的Zi(int x)构造函数里的第一行手工添加super(x);

     如果父类没有无参数的构数函数,则子类的构造函数中必须有super函数来明确要调用父类中的哪个构造函数。

    class Fu
    {
        Fu()
       {
           super();
           show();
           return;
        } 
       void show()
       {
           System.out.println("Fu show");
       }
    }
    class Zi
    {
        int num=8;
        Zi()
        {
            super();
            return ;
        }
        void show()
        {
             System.out.println("Zi show "+num);
        }
    }
    class Demo
    {
         public static void main(String [] args)
         {
              Zi z=new Zi();
              z.show();
          }
    }
    

      上述代码执行的结果为:

            Zi show 0

            Zi show 8

    很多人可能认为结果应该是:

           Fu show

           Zi show 8

    问题的关键是在执行到父类的无参构造函数时,show()调用的时子类的函数,应为此时this为当前的对象,即子类对象。

    子类中的属性变量在生成类时被赋予默认值,在执行完父类的无参构造函数时,再被赋予初始值。

    一个对象实例化过程:

    Person p=new Person();

    1.JVM会读取指定的路径下(classpath)的Person.class文件,并加载进内存,并会先加载Person的父类(如果有直接父类的情况下);

    2.在堆内存中开辟空间,分配地址。

    3.在堆内存的对象空间中,对对象中的属性进行默认初始化。

    4.调用对应的构造函数进行初始化。

    5.在构造函数中,第一行会先到调用父类中构造函数进行初始化。

    6.父类初始化完毕后,再对子类的属性时行显示初始化。

    7.再进行子类构造函数的特定初始化。

    8.初始化完毕后,将地址值赋值给引用变量。

    final关键字

    1.final是一个修饰符,可以修饰类、方法、变量。

    2.final修饰的类不可以被继承。

    3.final修饰的方法不可以被覆盖。

    4.final修饰的变量是一个常量,只能被赋值一次。

    5. final使用时必须显式初始化,常量所有字母一般都大写,多个单词中间用下划线连接。

  • 相关阅读:
    django全文搜索学习心得(一)haystack 篇
    django request get_full_path 中文问题
    django全文搜索学习心得(五) whoosh 精简版
    django全文搜索学习心得(二)solr 篇
    django全文搜索学习心得(四)sphinx篇
    模拟队列
    差分
    模拟栈
    区间合并
    离散化
  • 原文地址:https://www.cnblogs.com/jsddj/p/7443183.html
Copyright © 2020-2023  润新知