Java基础——抽象类和接口

一、抽象类(强制子类覆写方法)

抽象类是普通类的“超集”,只是比普通类多了一些抽象方法而已(抽象方法个数:0-N)

抽象方法所在的类必须是抽象类,子类若是继承了抽象类,必须覆写所有的抽象方法(子类是普通类)

Java中定义抽象类或者抽象方法使用 abstract 关键字

1、抽象方法所在的类必须使用abstract声明为抽象类

抽象方法指的是1、使用abstract关键字声明,只有函数声明,没有函数实现的方法(2、没有方法体的方法),称为抽象方法。抽象类中没有具体实现,延迟到子类实现

public abstract class Sharp {

   public abstract void print();

}


public class Cycle extends Sharp{
    @Override
    public void print() {
        System.out.println("●");
    }
}


public class Square extends Sharp{
    @Override
    public void print() {
        System.out.println("■");
    }
}



public class Test {
    public static void test(Sharp sharp){
        sharp.print();
    }
    public static void main(String[] args) {
        test(new Cycle());
        test(new Square());
    }
}

 子类必须覆写所有的抽象方法,否则就会报错

 2、若一个类使用abstract关键字声明为抽象类,无法直接通过该类实例化对象,哪怕该类中一个抽象方法都没有。(当一个类是抽象类,不管有无抽象方法,该类本身就是一个抽象的概念,没法具体到某个特定的实例)只能通过子类向上转型变为抽象父类的引用。

3、子类继承了抽象类,就必须强制子类覆写抽象类中的所有抽象方法(子类是普通类)。也满足单继承局限,一个子类只能extends一个抽象类。

abstract class A{
    public abstract void printA();
}

//抽象类B继承抽象类A
//A中的抽象方法,B可以覆写,也可以不覆写
//如果B覆写A的抽象方法,则C就不需要再继续覆写A的抽象方法
//如果B没有覆写A的抽象方法,则C既需要覆写B的抽象方法,也需要覆写A的抽象方法

abstract class B extends A{

    public abstract void printB();
}
public class C extends B{
    @Override
    public void printA() {
        
    }

    @Override
    public void printB() {
        
    }
}

4、抽象类是普通类的“超集”(普通类有的内容,抽象类全都有),只是比普通类多了一些抽象方法而已。抽象类虽然没法直接实例化对象,但也存在构造方法,子类在实例化时,仍然遵从继承的规则,先调用父类的构造方法,而后调用子类的构造方法。

abstract class BaseTest{
    public BaseTest(){
       print();
    }
    abstract void print();


}
public class Fun extends BaseTest{
    private int num = 10;
    @Override
    void print() {
        //num = 0;
        System.out.println("num = " + num);
    }

    public static void main(String[] args) {
        Fun fun = new Fun();
    }

}

二、接口

接口中只有全局常量(1%)和抽象方法(99%)—>更加纯粹的抽象概念。

接口使用关键字 interface 声明接口,子类使用 implements 实现接口(必须覆写所有的抽象方法)

1、接口使用的场景

(1)接口表示具备某种能力/行为,子类实现接口时不是满足 is a 关系&#

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值