面向对象05

static关键字详解

  • Student类
package java_oop.demo08;

/**
 * @author IT_Jay
 * @date 2022/1/26 18:00
 */

//static
public class Student {
    private static int age;     //静态变量      多线程
    private double score;       //非静态变量

    public void run(){
        Student.go();       //非静态方法调用静态方法    也可以写为  go();
    }
    public static void go(){

    }

    public static void main(String[] args) {
        Student s1 = new Student();
        System.out.println(Student.age);
//        System.out.println(Student.score);      //报错
        System.out.println(s1.age);
        System.out.println(s1.score);

        new Student().run();
        go();
    }
}

  • Person类
package java_oop.demo08;

/**
 * @author IT_Jay
 * @date 2022/1/26 18:12
 */

//final:常量    final 修饰的类不能被继承
public final class Person {
    //执行次序:2
    {
        //代码块(匿名代码块):赋初值
        System.out.println("匿名代码块");
    }
    //执行次序:1
    static {
        //静态代码块:只执行一次
        System.out.println("静态代码块");
    }
    //执行次序:3
    public Person(){
        System.out.println("无参构造方法");
    }

    public static void main(String[] args) {
        Person person = new Person();
        System.out.println("===================");
        Person person1 = new Person();
    }
}

  • Test类
package java_oop.demo08;

//静态导入包
import static java.lang.Math.random;
import static java.lang.Math.PI;
/**
 * @author IT_Jay
 * @date 2022/1/26 18:19
 */

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

抽象类

  • abstract修饰符可以用来修饰方法,也可以修饰类,如果修饰方法,那么该方法就是抽象方法;如果修饰类,那么该类就是抽象类
  • 抽象类中可以没有抽象方法,但是有抽象方法的类一定要声明为抽象类
  • 抽象类,不能使用new关键字来创建对象,它是用来让子类继承的
  • 抽象方法,只有方法的声明,没有方法的实现,它是用来让子类实现的
  • 子类继承抽象类,那么就必须要实现抽象类 没有实现的抽象方法,否则该子类也要声明为抽象类
package java_oop.demo09;

/**
 * @author IT_Jay
 * @date 2022/1/26 18:58
 */
//abstract 抽象类 :     类extends: 单继承;          (接口可以多继承)
public abstract class Action {
    //约束   有人帮我们实现
    //abstract   抽象方法:只有方法名,没有方法的实现
    public abstract void doSomething();

    //1、抽象类不能new  ,只能靠子类去实现:约束
    //2、抽象类可以写普通的方法
    //3、抽象的方法必须在抽象类中
    //抽象的抽象     :约束
}
package java_oop.demo09;

/**
 * @author IT_Jay
 * @date 2022/1/26 19:01
 */

//抽象类的所有方法,继承了他的子类,,都必须要实现他的方法
public class A extends Action{
    @Override
    public void doSomething() {

    }
}

接口

  • 普通类:只有具体实现
  • 抽象类:具体实现和规范(抽象方法)都有
  • 接口:只有规范!自己无法写方法; 专业的约束, 约束和实现分离:面向接口编程
  • 接口就是规范,定义的是一组规则,提现了现实世界中“如果你是。。。。则必须能。。。”的思想。例如:如果是汽车,就必须能跑
  • 接口的本质是契约,就像法律,制定好后大家遵守
  • OO的精髓,是对对象的抽象,最能体现这一点的就是接口。为什么我们讨论设计模式都只针对具备了抽象能力的语言(C++,C#等),就是因为设计模式所研究的,实际上就是如何合理的去抽象

声明类的关键字是class,声明接口的关键字是interface

  • UserService
package java_oop.demo10;

/**
 * @author IT_Jay
 * @date 2022/1/26 19:29
 */

//interface 定义 的关键字, 接口都需要有实现类
public interface UserService {

    //常量   默认省略public static final
    int age = 99;

    //接口中的所有定义的方法都是抽象的   默认public abstract
    void add(String name);
    void delete(String name);
    void update(String name);
    void query(String name);
}
  • UserServiceImp
package java_oop.demo10;

/**
 * @author IT_Jay
 * @date 2022/1/26 19:33
 */

//抽象类:extends
//类可以实现接口,  implements 接口
    //实现接口的类,需要重写接口中的方法
public class UserServiceImp 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() {

    }
}
  • TimeService
package java_oop.demo10;

/**
 * @author IT_Jay
 * @date 2022/1/26 19:36
 */

public interface TimeService {
    void timer();
}
接口作用:
    1、约束
    2、定义一些方法,让不同的人实现
    3、public abstract
    4、public static final
    5、接口不能被实例化,接口中没有构造方法
    6、implements可以实现多个接口,需要重写接口中的方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值