day15 static关键字&抽象类&接口

static

//Static
public class Student {

    private static int age; //静态变量
    private double score;   //非静态变量

    public void run(){
        System.out.println("run");
        go();               //非静态的方法 可以调用静态方法
    }

    public static void go(){
        System.out.println("go");
    }

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

        System.out.println(Student.age);    //也称为类变量 通过类.访问
        System.out.println(s1.age);         
        System.out.println(s1.score);		//需要创建对象访问

        s1.run();       //对象.方法
        Student.go();   //类.方法  static

    }
}
public class Person {

    //2 附初始值  匿名代码块
    {
        System.out.println("匿名代码块");
    }

    //1 静态方法只执行一次
    static {
        System.out.println("静态代码块");
    }

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

    public static void main(String[] args) {
        Person p1 = new Person();

        System.out.println("===========");

        Person p2 = new Person();   //无静态代码块
    }
}


静态代码块	//只在第一执行
匿名代码块
person 构造方法
===========
匿名代码块
person 构造方法
package com.oop.deom08;

//静态导入包
import static java.lang.Math.random;

public class Test {
    public static void main(String[] args) {
        System.out.println(random());   //静态导入包后可以直接调用
    }
}

创建类时 添加final 则无法被继承

抽象类

  • abstract修饰符可以用来修饰方法也可以修饰类 如果修饰方法 那么改方法就是抽象方法 如果修饰类 那么该类就是抽象类
  • 抽象类中可以没有抽象方法 但是有抽象方法的类一定要声明为抽象类
  • 抽象类 不能使用new关键字来创建对此昂 它是用来让子类继承的
  • 抽象方法 只有方法的声明 没有方法的实现 它是用来让子类实现的
  • 子类继承抽象类 那么久必须要实现抽象类没有实现的抽象方法 否则该子类也要声明为抽象类
//abstract抽象类
public abstract class Action {
    //约束-有人帮我们实现
    //abstract 抽象方法 只有方法名字 没有方法的实现
    public abstract void doSomething();

    //1 不能new这个抽象类 只能靠子类去实现它 约束
    //2 抽象类中可以写普通的方法
    //3 抽象方法必须在抽象类中
    //抽象的抽象 : 约束
}
//抽象类的所有方法 继承了它的子类 都必须要实现它的方法
public class A extends Action {
    @Override
    public void doSomething() {
    }
}

接口

  • 普通类 : 只有具体实现
  • 抽象类 : 具体实现和规范(抽象方法)都有
  • 接口 : 只有规范
  • 接口就是规范 定义的是一组规则 体现了现实时间中"如果你是…则必须能…"的思想
    • 如果你是天使 则必须能飞
    • 如果你是汽车 则必须能跑
    • 如果你是好人 则必须干掉坏人
    • 如果你是坏人 则必须欺负好人
  • 接口的本质是契约 就像我们人减的法律一样 指定好后大家都遵守
  • oo的精髓 是对对象的抽象 最能体现这一点的就是接口 为什么我们讨论设计模式都只针对具备了抽象能力的语言 就是因为设计模式的所研究的 实际上就是如何合理的去抽象

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

作用

  1. 约束
  2. 定义一些方法 让不同的人实现
  3. 接口中定义的方法都是public abstract
  4. 定义的变量都是常量 public static final
  5. 接口不能被实例化 接口中没有构造方法
  6. implements可以实现多个接口
  7. 必须要重写接口中的方法
package com.oop.demo10;

//interface定义关键字  接口都需要有实现类
public interface UserService {
    //接口中的所有定义其实都是抽象的 public abstract
    void add(String name);
    void delete(String name);
    void update(String name);
    void query(String name);

    //常量 public static final
    public static int AGE=99;
}
public interface TimeService {
    void timer();
}
package com.oop.demo10;

//抽象类 extends 只能单继承
//类 可以实现接口implement接口
//实现了接口的类 就需要重写接口中的方法
//多继承-利用接口实现多继承
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() {

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值