Day24 - 面向对象编程OOP 05

1. static关键字详解

1.1 static -- 静态变量与静态方法

private static int age;  //静态的变量 类在内存中只有一个;如果想让多个实例同时能操作该变量则定义static 多线程!
private double score;    //非静态的变量

public void run(){

}

//静态方法,同一个类里可以直接调用
//但是静态方法无法直接调用非静态方法,因为加载时还不存在
public static void eat(){

}

public static void main(String[] args) {
    Student s1 = new Student();

    Student.eat();
    eat();

}

1.2 静态代码块

//2
    {
        //代码块(匿名代码块)  程序在执行时无法主动调用,创建对象时自动创建,并且在构造器之前
        System.out.println("匿名代码块");
    }

    //1
    static {
        //静态代码块  类创建的时候就执行,永久只执行一次
        System.out.println("静态代码块");
    }

    //3
    public Person(){
        System.out.println("构造方法");
    }

    public static void main(String[] args) {
        Person person1 = new Person();
        System.out.println("====================");
        Person person2 = new Person();		//结果只有“匿名代码块”和“构造器”,因为
                                            //静态代码块只执行一次

    }

1.3 静态导入包

example:

import static java.lang.Math.random;
import static java.lang.Math.PI;

public class Test {

    public static void main(String[] args) {
        System.out.println(random());
        System.out.println(PI);
    }
}

2. 抽象类

abstract修饰符可以用来修饰方法也可以修饰类

  • abstract 方法名 --> 抽象方法;
  • abstract 类名 --> 抽象类

抽象类中可以没有抽象方法,但是有抽象方法的类一定要声明为抽象类

抽象类:不能使用new关键字来创建对象,它是用来让子类继承的

抽象发方法:只有方法的声明,没有方法的实现,它是用来让子类实现的

子类继承抽象类,那么就必须要实现抽象类没有实现的抽象方法,否则子类也要声明为抽象类

3. 接口

  • 普通类:只有具体实现
  • 抽象类:具体实现和规范(抽象方法)都要
  • 接口:只有规范,无法写方法 -- 专业的约束!!约束和实现分离
  • 接口的本质是契约
  • 声明类的关键字是class,声明接口的关键字是interface

例:

public interface UserService {
    //接口中的所有定义其实都是抽象的 public abstract

    void add(String name);
    void delete(String name);
    void update(String name);
    void query(String name);

}

public interface TimeService {
    void timer();
}

抽象类:extends
类 可以实现接口 implements 接口名
实现了接口的类,就需要重写接口中的方法

多继承~利用接口实现多继承

public class UserServiceImpl implements UserService, TimeService{
    @Override
    public void add(String name) {

    }

    @Override
    public void delete(String name) {

    }

    @Override
    public void update(String name) {

    }

    @Override
    public void query(String name) {

    }

    @Override
    public void timer() {

    }
}
  • 接口的作用总结
  1. 起约束作用
  2. 定义一些方法,让不同的人实现
  3. 所有的方法:public abstract
  4. 所有的属性:public static final
  5. 接口不能被实例化,接口中没有构造方法
  6. implements可以实现多个接口,实现多继承
  7. 实现接口的类必须要重写接口中的方法
posted @ 2021-07-06 22:22  筠亭之  阅读(29)  评论(0编辑  收藏  举报