小饶学编程之JAVA SE第一部分——面向对象:10抽象类和接口

一、抽象类

1.1由来

“用进废退”
多态的领域 重写的方法被子类覆盖 不可能被调用到 索性去掉方法体 退化为抽象方法。

1.2概念

将父类中被重写的方法的方法体删掉,用abstract修饰,就相当于将这个方法声明为一个抽象方法,顺带将该类声明为抽象类。前提该方法中的方法体没有任何实际的作用。

相对于对象而言,类本身就是一个抽象的概念,为了更进一步体现出类的抽象性,我们可以用关键字abstract去修饰类。

抽象方法:父类(定目标)和子类(实现目标)的分工。

1.3定义

父类:

public abstract class Fu {
    //抽象方法可以理解为上层制定的宏伟目标,下层必须落实
    public abstract void a();
}

子类:

public abstract class Zi extends Fu {
    public void a() {
        System.out.println("公司上市了!");
    }
}

1.4语法规则

  • 1.被abstract修饰的类是抽象类。
  • 2.抽象类中可以有抽象方法,也就是被abstract修饰的方法,也可以没有。
  • 3.抽象方法没有方法体,只有方法声明。
  • 4.子类继承抽象类需要重写父类所有的抽象方法,否则,子类也必须声明为抽象类
  • 5.抽象类有构造方法,但是不能被显示调用,也就是不能实例化,或者说抽象类没有对象。
  • 6.抽象类的构造方法只在子类实例化时隐式调用。
  • 7.抽象类的使用一般是作为引用类型,指向非抽象的引用实例,体现出多态。
  • 8.构造方法和静态方法都不能(abstract)抽象修饰。(静态方法不能被子类覆盖(重写),一旦声明为抽象方法 将永远没有具体的实现)

1.5抽象方法跟子类的联系

  • (1)如果子类完全实现了父类的抽象方法,那么子类可以不用声明为抽象类。
  • (2)如果子类没有完全实现父类的抽象方法,那么子类必须声明为抽象类。

二、接口

2.1概念

  • 接口可以理解为定义的一组通用的组件,或者是功能模块。可替换,可拆卸。
  • 接口比抽象类更抽象,已经完全抽象得没边没影。

2.2定义

  • 和定义类的区别在于,将class关键字换成了interface
  • 所有的成员属性都是 public static final (公共的静态的常量)类型
  • 所有的方法都是:public abstract (公共的抽象方法)
public interface Hello1 {
    void a();//接口的成员方法
    int A=6;//接口的成员属性
}

三、总结

  • 1.抽象度:接口>抽象类>类>对象
  • 2.抽象类不能显示调用构造方法,不能直接创建对象,但可以在子类调用构造方法时隐式被调用。
  • 3.接口中只有抽象方法,没有构造方法和静态方法。
  • 4.接口:提供连接外部组件的口子。所以属性和方法都必须是public
  • 5.抽象类抽掉了对象的概念,接口进一步抽掉了类的概念。
  • 6.接口中的属性没有set/get,也就是不能封装,是static final类型,因为接口已经不再可以理解成类,而是一个组件。组件的属性在出厂时就已经定型了。
  • 7.多态的演变:
  1. Fu f=new Zi(); Fu是一个普通类
  2. Fu f=new Zi(); Fu是一个抽象类
  3. Fu f=new Zi(); Fu是一个接口,(使用最多)
  • 8.Static(静态)只修饰类的成员属性和方法,不修饰局部变量,也就是定义在方法体中的变量。静态方法表示类所特有的功能,这种功能的实现不依赖于类的具体实例,也不依赖于它的子类。因此,当前类必须为静态方法提供实现。(类加载时,会加载类的静态属性和方法)
  • 9.abstract(抽象)只修饰类和方法,不修饰属性和变量。
  • 10.抽象方法没有方法体:
    子类继承父类,往往会重写父类的方法,也就是会覆盖父类的方法,这个时候,父类的方法体基本没有用,所以直接不要方法体,用abstract修饰,变成抽象方法。再看静态方法,它是属于类空间,不可以被重写,所以自然不能省略掉方法体。构造方法也不能被重写,自然也不能被abstract修饰。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱喝皮蛋瘦肉粥的小饶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值