抽象类和接口

抽象类总结

在多态章节已经介绍了抽象类和抽象方法,抽象类和抽象方法定义如下代码所示

public abstract class Pet { 
    public abstract void toHospital() ;
}
抽象类对比普通类

①抽象类不能实例化,但可以通过创建一个引用变量,其类型是一个抽象类,指向非抽象的子类实例
②普通类可以被实例化

抽象方法对比普通方法

①抽象方法没有方法体
②普通方法有方法体

抽象类和抽象方法的使用

①抽象类中可以没有抽象方法,但包含了抽象方法的类必须被定义为抽象类
②如果子类没有实现父类的所有抽象方法,子类必须被定义为抽象类
③没有抽象构造方法,也没有抽象静态方法
④抽象类中可以有非抽象的构造方法,创建子类的实例时可能调用

接口

为什么使用接口

以门为例,门可以开和关,锁有上锁和开锁的功能,那么如果我们需要定义防盗门类,可以将门的共有属性和方法写在父类Door中。对于锁的定义,一种方法是作为父类的方法让子类继承,但是有些高级的门是指纹锁,有些是用钥匙打开的,甚至一些推拉门没有锁,故写在父类中,并不好处理,这是就可以用接口来处=处理,下面也会以此为例,实现该功能。

什么是接口

接口的定义如下:

public interface MyInterface {
	public static final 变量类型 变量名 = 初值;
    public abstract void 方法名()//其他方法
}

示例

// 利用接口实现防盗门
// 父类Door类
public abstract class Door {
    public abstract void open();
    public abstract void close();
}
// 锁接口
public interface Lock {
    void lockOpen();
    void lockClose();
}
// 拍照接口
public interface Photo {
    void photo();
}
// 子类FangDaoDoor,继承Door类,实现Lock、Photo接口
public class FangDaoDoor extends Door implements Lock,Photo{
    public void open() {
        System.out.println("开门");
    }
    public void close() {
        System.out.println("关门");
    }
    public void lockOpen() {
        System.out.println("插进钥匙,向左旋转钥匙三圈,锁上了,拔出钥匙");
    }
    public void lockClose() {
        System.out.println("插进钥匙,向右旋转钥匙三圈,锁打开了,拨出钥匙");
    }
    public void photo() {
        System.out.println("铃....咔嚓....照片已存储");
    }
}
// 主人类
public class Master {
    String name;
    FangDaoDoor fangDaoDoor = new FangDaoDoor();
    public void getIn(){
        fangDaoDoor.close();
        fangDaoDoor.photo();
        System.out.println("掏出钥匙");
        fangDaoDoor.lockClose();
    }
    public void getOut(){
        System.out.println("掏出钥匙");
        fangDaoDoor.lockOpen();
        fangDaoDoor.photo();
        fangDaoDoor.open();
    }
}
// 测试类
public class Test {
    public static void main(String[] args) {
        FangDaoDoor door = new FangDaoDoor();
        Master master = new Master();
        master.getOut();
        master.getIn();
    }
}
接口的使用规范

①接口不可以被实例化
②接口的方法都为抽象方法,默认以public abstract修饰
②实现类必须实现接口的所有方法,除非这个类也是抽象类
④实现类可以实现多个接口,用implements关键字,多个接口使用逗号隔开
⑤接口中的变量都是静态变量,默认public static final修饰

抽象类与接口对比

相同点
①都代表系统的抽象层
②都不能被实例化
③都包含抽象方法
不同点
①在抽象类中可以为部分方法提供默认实现,而接口中只能包含抽象方法
②一个类只能继承一个直接的父类,但可以实现多个接口
③抽象类便于复用,接口便于代码维护
使用原则:
①接口做系统与外界交互的窗口:接口提供服务
②接口本事一旦制定,就不允许随意修改
③抽象类可完成部分功能实现,还有部分功能可作为系统的扩展点

面向对象设计原则

①多用组合,少用继承
②针对接口编程
③针对扩展开放,针对改变关闭

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值