• Java基础super关键字、final关键字、static关键字、匿名对象整理


            super关键字

     

    10.1子父类中构造方法的调用

    public class Test {

        public static void main(String[] args) {

           new Zi();

        }

       

    }

    class Fu{

        int num ;

        Fu(){

           System.out.println("Fu构造方法"+num);

           num = 4;

        }

    }

    class Zi extends Fu{

        Zi(){

             //super(); 调用父类空参数构造方法

           System.out.println("Zi构造方法"+num);

        }

    }

     执行结果:

           Fu构造方法0

           Zi构造方法4

    子类会继承父类中的内容,所以子类在初始化时,必须先到父类中去执行父类的初始化动作。这样,才可以使用父类中的内容。

    当父类中没有空参数构造方法时,子类的构造方法必须有显示的super语句,指定要访问的父类有参数构造方法。

    10.2子类对象创建过程的细节

    如果子类的构造方法第一行写了this调用了本类其他构造方法,那么super调用父类的语句还有吗?

    这时是没有的,因为this()或者super(),只能定义在构造方法的第一行,因为初始化动作要先执行。

    父类构造方法中是否有隐式的super呢?

    也是有的。记住:只要是构造方法默认第一行都是super();

    父类的父类是谁呢?super调用的到底是谁的构造方法呢?

    Java体系在设计,定义了一个所有对象的父类Object

    l  注意:

    类中的构造方法默认第一行都有隐式的super()语句,在访问父类中的空参数构造方法。所以父类的构造方法既可以给自己的对象初始化,也可以给自己的子类对象初始化。

    如果默认的隐式super()语句在父类中没有对应的构造方法,那么必须在构造方法中通过this或者super的形式明确要调用的构造方法。

     final关键字

    11.1final的概念

    继承的出现提高了代码的复用性,并方便开发。但随之也有问题,有些类在描述完之后,不想被继承,或者有些类中的部分方法功能是固定的,不想让子类重写。可是当子类继承了这些特殊类之后,就可以对其中的方法进行重写,要解决上述的这些问题,需要使用到一个关键字final,final的意思为最终,不可变。final是个修饰符,它可以用来修饰类,类的成员,以及局部变量。不能修饰构造方法。

    11.2final的特点

    final修饰类不可以被继承,但是可以继承其他类。

        final修饰的方法不可以被子类重写,但父类中没有被final修饰方法,子类重写后可以加final

    final修饰的变量称为常量,这些变量只能赋值一次。而且终身不变。

    引用类型的变量值为对象地址值,地址值不能更改,但是地址内的对象属性值可以修改

        修饰成员变量,需要在创建对象前赋值,否则报错。(当没有显式赋值时,多个构造方法的均需要为其赋值。)

     

       static关键字

    12.1static概念

             当在调用对象的某个方法时,这个方法没有访问到对象的特有数据时,方法创建这个对象有些多余。可以的,我们可以通过static关键字来实现。static它是静态修饰符,一般用来修饰类中的成员

    12.2static特点

        被static修饰的成员变量属于类,不属于这个类的某个对象。(也就是说,多个对象在访问或修改static修饰的成员变量时,其中一个对象将static成员变量值进行了修改,其他对象中的static成员变量值跟着改变,即多个对象共享同一个static成员变量)

    被static修饰的成员可以并且建议通过类名直接访问

     

        访问静态成员的格式:

    类名.静态成员变量名

    类名.静态成员方法名(参数)

    对象名.静态成员变量名       ------不建议使用该方式,会出现警告

    对象名.静态成员方法名(参数)    ------不建议使用该方式,会出现警告

     

    12.3static注意事项

    静态内容是优先于对象存在,只能访问静态,不能使用this/super。静态修饰的内容存于静态区。

    main方法为静态方法仅仅为程序执行入口,它不属于任何一个对象,可以定义在任意类中。

    多态调用方法中,编译看=左边,父类有,编译成功,父类没有,编译失败

    运行,静态方法,运行父类中的静态方法,

    运行,非静态方法,运行子类的重写方法

    成员变量,编译运行全是父类

    12.4定义静态常量

    public static final修饰的变量来完成定义。此时变量名用全部大写,多个单词使用下划线连接。

    格式

    public static final 数据类型 变量名 = 值;

    接口中的每个成员变量都默认使用public static final修饰。

    所有接口中的成员变量已是静态常量,由于接口没有构造方法,所以必须显示赋值。可以直接用接口名访问

             匿名对象

    13.1匿名对象的概念

    匿名对象是指创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量。

    public class Person{

        public void eat(){

           System.out.println();

    }

    }

     

    创建一个普通对象

    Person p = new Person();

     

    创建一个匿名对象

    new Person();

    13.2匿名对象的特点

    创建匿名对象直接使用,没有变量名

    匿名对象在没有指定其引用变量时,只能使用一次

    匿名对象可以作为方法接收的参数、方法返回值使用

  • 相关阅读:
    119. Pascal's Triangle II
    118. Pascal's Triangle
    112. Path Sum
    111. Minimum Depth of Binary Tree
    110. Balanced Binary Tree
    108. Convert Sorted Array to Binary Search Tree
    88. Merge Sorted Array
    83. Remove Duplicates from Sorted List
    70. Climbing Stairs
    陌陌面试经历
  • 原文地址:https://www.cnblogs.com/mengmengi/p/10528250.html
Copyright © 2020-2023  润新知