Java中的关键字 - static,extends

1 篇文章 0 订阅
1 篇文章 0 订阅

Java中的关键字 - static,extends

(1)static关键字

static 关键字在Java中是静态的意思。用静态声明的属性和方法,可以被该类的任何对象调用,是所有对象所共有的属性。

模板类 :

package yau;

  public class Person {
    public static int count = 0;
    private String name;
    private int age;
    public Person(){
      count++;
    }
    public void work(){

    }
  }

场景类 :

import yau.Person;

public class Main {
    public static void main(String[] args) {
        Person p = new Person();
        new Person();
        new Person();
        new Person();
        new Person();
        System.out.println("count = " +p.count);
        System.out.println("count = " +Person.count);
    }

执行结果为:

"C:\Program Files\Java\jdk1.8.0_172\bin\java.exe" "-javaagent:D:\env\IntelliJ IDEA 2019.2.4\lib\idea_rt.jar=52181:D:\env\IntelliJ IDEA 2019.2.4\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_172\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\rt.jar;D:\yauproject\Demo01\out\production\Demo01" com.cn.ex.Main
count = 5
count = 5

Process finished with exit code 0

在代码中,count 是一个全局静态变量。用static声明的属性和方法,在内存中存放在方法去的永久代,所以通过类名可以调用,也可以通过对象进行调用。
但是用static声明的方法,不能调用对象中的属性和方法,因为这存在一个不确定性。
在创建对象时,static声明的属性和方法,在对象之前就存在,所以对象可以调用用static声明的属性和方法。当static声明的方法方法调用非static属性时,有时对象不存在,也就不存在该属性,所以static声明的方法不能调用非static声明的属性和方法。

(2)Java继承

(1)extends关键字
extends关键字,是子类继承父类时用到的关键字。本意为:拓展,Java中也可以理解为,继承
父类:

package yau;

  public class Person {
    private String name;
    public int age;
    public Person(){
      System.out.println("创建父类对象!");
    }
    public void work(){
      System.out.println("人可以工作!");
    }
  }

子类:

package yau;

public class Man extends Person{
    public Man(){
        System.out.println("创建子类对象");
    }
    public void work(){
        age = 30;
        System.out.println("男人工作要养家糊口!");
        System.out.println("年龄:" +age);
    }
}

场景类:

package com.cn.ex;

import yau.Man;

public class Main {
    public static void main(String[] args) {
        Man m = new Man();
        m.work();
    }
}

代码执行结果为:

"C:\Program Files\Java\jdk1.8.0_172\bin\java.exe" "-javaagent:D:\env\IntelliJ IDEA 2019.2.4\lib\idea_rt.jar=52644:D:\env\IntelliJ IDEA 2019.2.4\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_172\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\rt.jar;D:\yauproject\Demo01\out\production\Demo01" com.cn.ex.Main
创建父类对象!
创建子类对象
男人工作要养家糊口!
年龄:30

Process finished with exit code 0

上述代码中,在 Man 类中并没有创建年龄属性,但我们可以对其进行操作,原因是子类继承了父类对象的共有属性和方法。而且在代码中可以看出在创建子类对象之前要先创建父类对象。子类对象便是在父类对象基础上的拓展。
(1)里氏替换原则(LIS)
里氏替换原则总的就是一句话,为:所有父类完成的工作子类也可以完成

package com.cn.ex;

class Man extends Person{
    public Man(){
        System.out.println("创建子类对象");
    }
    public void work(){
        age = 30;
        System.out.println("男人工作要养家糊口!");
        System.out.println("年龄:" +age);
    }
}

class Person {
    private String name;
    public int age = 10;
    public Person(){
        System.out.println("创建父类对象!");
    }
    public void work(){
        System.out.println("人可以工作!");

    }
}

public class Main {
    public static void main(String[] args) {
        Person p = new Man();
        System.out.println("年龄为:" +p.age);
        p.work();
    }
}

代码执行结果为:

"C:\Program Files\Java\jdk1.8.0_172\bin\java.exe" "-javaagent:D:\env\IntelliJ IDEA 2019.2.4\lib\idea_rt.jar=53174:D:\env\IntelliJ IDEA 2019.2.4\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_172\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\rt.jar;D:\yauproject\Demo01\out\production\Demo01" com.cn.ex.Main
创建父类对象!
创建子类对象
年龄为:10
男人工作要养家糊口!
年龄:30

Process finished with exit code 0

上述代码中,我通过创建父类对象,但是用子类对象进行实例化。通过代码我们可以发现:
(1)当调用普通方法时,执行的时用 new 实例化的方法,也就是子类方法。
(2)不能调用子类独有的方法。
(3)但调用的属性便是父类的属性。

(3)Java中的继承规则

在Java中可以链式继承(多重继承),但不允许多继承。
在这里插入图片描述
在Java中不允许,子类即继承父类又继承祖宗类。只能父类继承祖宗类,子类继承父类,呈链式方式继承。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值