抽象类和接口

抽象类

一 丶什么是抽象类

  • 简单而说抽象类就是包含抽象方法的类,指在普通类的结构里增加抽象方法的组成部分。
  • 那什么是抽象方法呢?抽象方法是指没有方法体的方法,同时该方法要被关键字abstract修饰,这个方法可以没有具体的实现!

抽象类里可以包含抽象方法和普通方法

//定义一个抽象类
abstract class X{
    //普通方法
	public void study(){
	  System.out.println(" 我在学习 ! ");
	  //抽象类里可以包含普通的方法
	  //存在方法体的方法
	}
	//抽象方法
	abstract void play();
	//抽象方法可以没有具体的实现,但必须要被关键字 abstract 修饰!
}

抽象类不能直接被实例化

public class Test{
public static void main(String [] args){

       X x = new X(); 
}
}
// 编译出错
// java: X是抽象的:无法实例化

抽象类中的方法一定要被子类重写
如果是抽象类继承了一个抽象类,那么可以不用重写这个抽象方法。但是,如果这个抽象类再次被一个普通类继承,那么一定要重写抽象方法!

//普通类继承抽象类
class Y extends X {
//定义普通类Y 继承抽象类X ,则需要重写抽象类中的抽象方法!
@Override
    void play() {
        
    }
}

//抽象类继承抽象类
abstract class Z extends X{
    //如果抽象类继承了一个抽象类,那么可以不重写play方法!
}

抽象类和普通类的区别

  • 和普通类相比,抽象类不能被实例化
  • 抽象类能够有构造函数,被继承的时候,子类一定要继承父类的一个构造方法,但是抽象方法不能被声明为静态
  • 抽象类中,可以允许有普通的方法有主体,抽象方法只需要声明,不需要实现
  • 抽象类一定要被关键字abstract修饰

接口

一 丶什么是接口

  • 接口是抽象类的更进一步, 抽象类中还可以包含非抽象方法,,和字段.。而接口中包含的方法都是抽象方法,字段只能包含静态常量。
  • 接口用于Java中实现抽象和多重继承。
  • 接口要被关键字interface修饰。

定义接口

interface IA{
//定义一个接口IA
}

接口中的方法一定是抽象方法abstract,也一定是public

interface IA{
//定义一个接口IA
public abstract void eat();
//接口中的方法默认为抽象方法,不需要具体实现
void  drink();
//系统会默认 eat1() 为 public abstract void drink();
//因此在接口中可以省略 public 和 abstract
}

接口也不能被实例化

public class Test {
    public static void main(String[] args) {
        IA a = new IA() ;
    }
}
//此时运行时程序报错
// java: IA是抽象的; 无法实例化

类和接口的直接关系是implements,此时接口当中所有的方法都要被重写

//定义类W实现接口IA,此时接口里的方法全部被重写
class W implements IA{

    @Override
    public void eat() {
        
    }

    @Override
    public void drink() {

    }
}

在java当中一个类,可以实现多个接口

//定义三个接口
interface IA{
    public abstract void eat();
    void drink();

}
interface IB{
    void draw();
}
interface IC{
    void run();
}

//此时当类R实现多个接口时,每个接口中的方法都被重写
//实现多个接口,用 , 连接
class R implements IA,IB,IC{
    @Override
    public void eat() {
        
    }

    @Override
    public void drink() {

    }

    @Override
    public void draw() {

    }

    @Override
    public void run() {

    }
}

接口与接口直接也是继承extends,类与接口之间是 implements

//类与接口之间是 implements
class S implements IB{
    @Override
    public void draw() {
        
    }
}
//接口与接口直接也是继承extends
interface IB{
    void draw();
}
interface IC extends IB{
    void run();
}

抽象类与接口的区别

  1. 接口可以多实现,而抽象类只能单继承
  2. 抽象类中的方法,可以是protect 和abstract修饰,而接口中,都默认为public abstract
  3. 抽象类可以像普通类一样有自己的普通方法,但是接口不行
  4. 抽象类中可以拥有静态代码块,接口中的不能拥有
  5. 接口可以多继承,抽象类只能单继承
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值