抽象类方法和接口

一、抽象类 方法

1.抽象方法使用规则

  1. 抽象方法没有方法体
  2. 含有抽象方法的类必须是抽象类
  3. 抽象类中可以暂时没有抽象方法
  4. 抽象类中的抽象方法跟子类有什么联系?
    (1) 如果子类完全实现了父类的抽象方法,那么子类可以不用声明为抽象类
    (2) 如果子类没有完全实现父类的抽象方法,那么子类必须声明为抽象类

2.抽象类的语法规则

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

public abstract class Zi1 extends FoolishMan{
   

}
public abstract class Zi2 extends Zi1{
   
    @Override
    public void moveMoutain() {
   
        System.out.println("第三代完成了移山");
    }
}
public class Zi3 extends Zi2{
   
    @Override
    public void fillOcean() {
   
        System.out.println("完成了填海");
    }
}

public class TestFool {
   
    public static void main(String[] args) {
   
        //抽象类有构造方法,但是不能被显示调用,也就是不能实例化,
        // 或者说抽象类没有对象。--防止直接调用抽象方法
        Zi3 z3 = new Zi3();
        z3.fillOcean();
        z3.moveMoutain();
    }
}
完成了填海
第三代完成了移山

二、接口

接口的含义:

接口就是提供一种统一的“协议”,而接口中的属性也属于“协议”中的成员.它们是公共的,静态的,最终的常量.相当于全局常量。

抽象类是不完全的类,相当于是接口和具体类的一个中间层.即满足接口的抽象,也满足具体的实现.

接口的语法规则

  1. 定义一个接口:
    public interface 接口名{}

  2. 接口的成员:
    成员属性:public static final (公共的静态常量)类型
    成员方法:public abstract (公共的抽象方法) 或静态方法
    无实例方法

  3. 接口的应用理解:
    接口可以理解为定义的一组通用的组件,或者是对外提供服务的功能模块,具体可替换,可拆卸的特点接口比抽象类更抽象,已经完全抽象得没边没影。
    接口通常作为实体类的成员属性,和实体类是附属关系,而不是包含关系。

1.为什么接口中的属性是静态的常量?

(1) 首先接口由于少了方法的实现,所以不能实例化,这个与抽象类一致,
(2) 由于不能实例化,所以对于成员变量只能是static
(3) 由于是static所以所有实现了接口的类共享一份
(4) 由于所有人共享一份,同时接口的定义是“所有实现该接口的人都共同拥有这些属性/功能
(5) 由于所有的实现类都共同拥有,若是变量则实现类A的改变会导致实现B的改变
(6) 会由于实现类的操作而改变的东西违反了接口的定义
(7) 所以为了确保每个实现的接口都共同遵守这个“属性”,属性必须是final
(8) 由于接口本身的定义是public,最后就是 public static final xxx

public class Printer {
   
    private InkBox inkBox;
    private Paper paper;

    public InkBox getInkBox() {
   
        return inkBox;
    }

    public void setInkBox(InkBox inkBox) {
   
        this.inkBox = inkBox;
    }

    public Paper getPaper() {
   
        return paper;
    }

    public void setPaper(Paper paper) {
   
        this.paper = paper;
    }

    public void show(){
   
        System.out.println("使用"+inkBox
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值