java抽象类和接口

抽象类

abstract: 修饰方法/类

  • 有抽象方法的类必须定义为抽象类

  • 抽象类不能被实例化,即不能使用new关键字

  • 抽象类可以有构造函数,创建子类对象时使用

  • 一个抽象类至多有0个抽象方法,至多所有都是

  • 子类必须重写父类抽象方法或者子类也为抽象类 非抽象方法可不重写

  • 抽象方法: 就是项目开发时候的一种[规范] 抽象方法只做方法的声明 不做方法的具体实现

abstract public class MyAB { //使用abstract修饰类
    public double n;
    final static public double PI = 3.14;
​
    public MyAB() {
    }
​
    public MyAB(double n) {
        this.n = n;
    }
​
    abstract public double  ZC(double n); //使用abstract修饰方法 没有方法体
    abstract public double  Area(double n);
}
​
public class Circle extends MyAB{
​
   //非抽象子类必须重写
    @Override
    public double ZC(double n) {
        return PI*2*n;
    }
​
    @Override
    public double Area(double n) {
        return PI*n*n;
    }
}

接口

接口可以看做是一种极端的抽象类(接口不属于类)。它不允许有构造方法,不允许被实例化

  • 接口使用interface 代表的是接口

  • 接口中定义的变量都使用 public static final(可省略) 也就意味着定义的都是常量

  • 在接口中定义的方法都是使用 public abstract 修饰的 也就意味着是抽象方法(JDK7及以前版本)

  • 接口不可以被实例化(不可以被new对象)

  • 接口中不可以定义构造方法 /代码块/静态代码块

  • 一个类可以实现多个接口 使用(implements) 每一个接口之间使用逗号进行分割

  • 一个类既想继承一个类又想实现多个接口 顺序是先继承 再实现 例子:public class Cla extends Fu implements Face1,Face2

public interface Face1 {
    public static final int a =100;
    int b=10; // 默认为public static final 可不写
​
    public abstract void aa();
    void bb(); //方法默认为public abstract 同样无方法体
}
public interface Face2 {
    
}
public class Fu {
  
}
public class Cla extends Fu implements Face1,Face2 {
   public  void aa(int a){
​
    }
    public void bb(){
​
    }
}

接口和接口之间注意:

  • 接口和接口之间是多继承

  • 类和类之间是单继承 类和接口之间是多实现 接口和接口之间是多继承

  • 如果一个接口继承了两个接口,再父接口中定义相同的常量 外部获得时候就会报错

  • 如果一个接口继承了两个接口 两个父接口中有相同方法 这样操作不报错 但是在子接口中相当于只有一个


    JDK8/9接口种新增的操作

  • JDK8中新增了 静态方法/非静态方法(必须加上default) 都需要使用public 修饰

  • JDK9中新增了私有的静态/非静态方法

  • 上面的非抽象方法 子类是可以实现 也可以不实现!!

public interface B {
​
    String  name="b";
​
    void  aa();
}
public interface C {
    String  name="c";
​
​
     void  aa(int num);
}
public interface A extends B,C {
​
    //String  name="a";
​
}
public class Zi  implements  A {
    @Override
    public void aa() {
​
    }
​
    @Override
    public void aa(int num) {
​
    }
}
System.out.println(A.name); //报错 在A中定义String后打印a
​
public interface D {
  //jdk8  public可省略
    public static void test(){
        System.out.println("新增了静态方法");
    }
​
    public default void test2(){ 
        System.out.println("新增了default方法");
    }
    //jdk9+  便于将多个方法中的冗余代码进行提取,并且不对外公开。减少冗余、也实现了代码隐藏
    private   void aa(){
    }
}
​

区别

接口:

  • 实现类可以实现多个接口。

  • 接口中只能包含public static final属性。

  • 接口只能有抽象方法,静态方法,default修饰的方法。

  • 接口不允许有构造方法。

  • 接口可以多继承

  • 不可以创建对象

抽象类:

  • 子类只能继承一个抽象类。

  • 抽象类可以包含任意类型属性。

  • 抽象类可以有普通方法,静态方法,抽象方法,但是不能有default修饰的方法。

  • 抽象类可以有构造方法。

  • 不可以创建对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值