欢迎光临散文网 会员登陆 & 注册

Java笔记--static关键字、继承

2023-09-02 21:46 作者:爪哇岛江户川  | 我要投稿

一、static关键字

static关键字:修饰符,可以修饰成员变量,成员方法。

特点:

1、被类的所有对象所共享

可以看到第二个学生对象的school信息和第一个共享。

2、多了一种调用方式,可以通过类名.调用。

通过对象.调用和通过类名.调用都可以,但是通常使用类名进行调用

3、随着类加载而加载,优先于对象而存在。也就是说在new对象之前就可以调用类名.

这样是不会报错的。

在创建工具类的时候,如果不加static,只能通过创建工具类的对象,然后对象.方法名调用方法。但是如果在方法中加入static,就可以通过类名.方法名的方式调用方法,同时将工具类的构造方法private,防止创建工具类对象。

*在静态方法中,只能直接访问静态成员变量和静态成员方法,要访问非静态的成员变量和成员方法,只能通过创建对象,然后通过对象来调用非静态的成员变量和成员方法。

在这里我们创建了一个静态成员变量,一个成员变量,一个静态成员方法和一个成员方法。

当我们在main方法中调用静态成员变量num1和静态成员方法method( )的时候没有报错,但是当我们去调用非静态的成员变量num2和非静态的成员方法print( )的时候,报错了。

想一想内存中的过程,因为带有static,随着类加载而加载,优先于对象存在,当类加载完成的时候,带有static的main方法加载完成。而非静态的成员变量和成员方法是当创建对象后内存中才存在。

*static中不允许使用this关键字。

同上面一样,因为static随着类的加载而加载,优先于对象。

重新认识一下main方法:

public :权限修饰符,因为main方法是要被JVM调用的。

static :被JVM调用,不用创建对象。

因为main方法是静态的,所以测试类中的方法都是静态的,因为测试类中不用创建对象。

void:被JVM调用,不需要返回值。

main:方法名,JVM只认识这个。

String[ ] args :以前是做键盘录入的,现在有了Scanner,现在没用了。

二、继承

继承:让类与类之间产生关系 (子父类关系),子类可以直接使用父类中非私有的成员。

继承的格式:

如图所示,Coder类和Manager具有相同的属性。

这样之后,Employee类就是Coder类和Manager类的父类,子类就可以调用父类中的非私有的成员了。

我们可以看到Coder可以正常调用Employee类中的成员。

现在我们将Employee中的name私有:

此时发现已经报错了。其实对于private的成员变量,我们依然可以通过get和set方法来调用父类成员变量。

输出结果:

由此可见,继承可以提高代码的复用性。

什么时候使用继承:


如果在子类出现了同名的成员变量,代码会遵循就近原则,如果非要使用父类的成员变量,可以使用super.来调用。

子类和父类中都有成员num,我们创建一个子类对象调用num。

运行结果:


方法重写:

注意事项:

Java中继承的特点:
Java只支持单继承,不支持多继承,但支持多层继承

一个儿子只能有一个父亲,不能有很多父亲,但是儿子可以有儿子。


继承中的构造方法:

子类在完成初始化之前,会先完成父类的初始化。不然的话:

在所有的构造方法中,都默认隐藏了一句话 super( );通过这句代码,来访问父类的空参构造方法。

这里我们创建一个子类和父类,分别提供其无参的构造方法和带参的构造方法。

然后创建两个子类对象:

运行程序:

可以看到除了子类的空参和带参的构造方法执行了之外,父类的空参构造方法也执行了两次。

这就是我们之前提到的,在所有构造方法(包括父类)的第一行,隐藏了一句super( );,通过这句代码,访问父类的空参构造方法。

1、为什么子类调用构造方法的时候,会先调用父类的构造方法?

因为如果要继承父类的属性,就得完成父类的初始化。

2、子类调用父类的空参构造方法能理解,为什么父类也要隐藏一句super( )?

其实在Java中,所有的类都直接或间接的继承Object类,也可以是除了Object类,所有的类的第一行super( )。


Java笔记--static关键字、继承的评论 (共 条)

分享到微博请遵守国家法律