抽象类与接口

先简单说一下static

关于 static

static 修饰的方法及属性是同类一起加载的,所以可以直接使用类名进行调用。其外,类中非静态的方法也可以调用静态的方法和属性,但是静态的方法不能调用非静态的方法和属性。

private  static int age;
private double score;
public void print(){
    System.out.println(Student.age);
}
public void study(){
    read();
}
public static void read(){
    //study();会报错
}

除此之外还有静态代码块

    {
        System.out.println("匿名代码块"); //执行顺序2,一般可以用来赋一些初始值
    }
    static {
        System.out.println("静态代码块"); //执行顺序1,但只执行一次
    }
    public Student(){
        System.out.println("构造方法"); //执行顺序3
    }

    public static void main(String[] args) {
        Student s1 = new Student();
        System.out.println("============");
        Student s2 = new Student();
    }
输出方法:
静态代码块
匿名代码块
构造方法
============
匿名代码块
构造方法

抽象类

关键字: abstract

特点:

  • 抽象类中的抽象方法可以没有方法体,只有方法名,没有方法体,没有{},以; 结尾
  • 抽象方法必须要被继承这个抽象类的子类重写,子类继承抽象类,那么就必须要实现抽象类没有实现的抽象方法,否则该子类也要声明为抽象类(类单继承的原因)
  • 抽象类不能被new出来,只能靠子类去实现它
  • 抽象类中可以有普通方法,但抽象方法只能在抽象类中
public abstract class Action{
    public abstract void dosomething();
}

思考: 抽象类存在构造方法吗?

抽象类中,有构造方法,但是有不能new,那么构造方法干嘛的呢? 给子类用。

抽象类本质也是类,只能实现单继承,如何实现多继承,那么就有了接口的诞生

接口

  • 普通类:只有具体实现
  • 抽象类:具体实现和规范(抽象方法)都有
  • 接口:只有规范,自己无法写方法,实现约束和实现分离

接口就是规范,定义是一组规则。体现了显示世界中,如果你是…则可以做…的思想。

接口的本质是契约,制定好后大家都要遵守。

OOP的精髓,是对对象的抽象,最能体现这一点的就是接口。为什么会讨论设计模式都是只针对具备面对对象能力的语言,就是因为设计模式所研究的,实际上就是如何合理的去抽象。

注意:

  • 接口是一种约束,一种规范
  • 接口定义了一些方法,让不同的人实现
  • 方法类型是 public abstrat
  • 常量类型是 public static final
  • 接口不能被实例化,因为接口没有构造方法
  • 一个类可以同时实现多个接口
package OOP.Demo06;
public interface UserService {
    //接口中的所有定义其实都是抽象的 public abstract
    void add(String name);
    void delete(String name);
    void update(String name);
    void query(String name);
}

package OOP.Demo06;
public interface TimeService {
    void showtime(String time);
}

package OOP.Demo06;
//类可以实现接口 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 showtime(String time) {
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值