韩顺平 java 第13讲第14讲 抽象类、接口、final

抽象类

为什么存在抽象类?

当父类的一些方法不能确定时,可以用abstract关键字来修饰该方法(也就是抽象方法),用abstract来修饰该类。
比如之前的Animal类,可以这么定义:

abstract class Animal{
    String name;
    int age;
    abstract public void cry();
}

抽象类和抽象方法需要注意

  1. 当一个类继承的父类是抽象类的话,需要我们把父类中的所有的抽象方法全部实现。
  2. 用abstract修饰的类是抽象类,修饰的方法是抽象方法。
  3. 抽象方法不能实现!!(就是不能带{},因为带了{}之后,即使什么不做也相当于是实现了!!)
  4. 抽象类不能被实例化。(你想想,你实例化了,抽象方法都不知道自己要干什么,矛盾了吧)
  5. 抽象类可以没有抽象方法。但是有抽象方法的类必须是抽象类。
  6. 抽象方法不能有主体,也就是不能有“{ }”

接口

为什么有接口?

usb就是现实中的接口。
接口就是给出一些没有内容的方法,封装到一起,到某个类需要使用的时候,在根据具体情况把这些方法写出来。

class 类名 implements 接口{
    方法;
    变量;
}

接口是更加抽象的抽象类,抽象类里的非抽象方法可以有方法体。接口里的所有方法都没有方法体,接口体现了程序设计的多态和高内聚低耦合的设计思想。

interface Usb{
    int a = 1;
    public void start();
    public void stop();
}
class Camera implements Usb{
    public void start(){
        System.out.println("I am Camera! Working now~");
    }
    public void stop(){
        System.out.println("I am Camera! Stop now~");
    }
}
class Phone implements Usb{
    public void start(){
        System.out.println("I am phone! Working now~");
    }
    public void stop(){
        System.out.println("I am Phone! Stop now~");
    }
}
//电脑来使用usb
class Computer{
    public void useUsb(Usb usb){  //接口也体现了多态
        usb.start();
        usb.stop();
    }
}
  1. 实现接口的时候需要把接口中的所有方法都实现
  2. 接口不能被实例化(同抽象类)
  3. 接口中的所有方法都不能有主体,也就是不能带大括号
  4. 一个类可以实现多个接口
  5. 接口中可以有变量,但变量不能用private 和 protected 修饰。接口中的变量,本质上都是public的、static的而且是final类型的(必须初始化),不管你加不加static修饰;在java开发中,我们经常把常用的变量定义在接口中,作为全局变量使用,访问形式:接口名.变量名(这点可以思考,正因为接口不恩能够被实例化,所以他的变量必须是静态的,不然没有存在的意义啊。而且,必须是piblic的,这就要求接口在所有地方实现的时候效果都一样,不然,比如在其它包里实现这个接口就少了些东西~~,那岂不是很蛋疼?那么,final怎么理解?其实,如果你能把接口里的东西随便乱改,那谁都不敢去实现接口了,因为你不知道接口里的变量是什么……这就想通了吧~)
  6. 一个接口不能继承其他的类(这个很明显),但是可以继承别的接口。

实现接口 VS 继承类

选那个呢?
继承只能单继承,但是接口却弥补了单继承的这个缺陷。
java的单继承机制可以保证类的纯洁性,比c++中的多继承机制简洁。但是不可否认,这个对子类功能的扩展有一定影响。我们可以这么看:
1. 实现接口可以看做是对继承的一种补充。实现接口可以在不打破继承关系的前提下,对某个类功能扩展,非常灵活。
2. 继承是层级式的,不太灵活。如果多层继承中,修改了上层类的某个方法,则其所有的子类都会随之修改,比较恐怖。但是接口只针对实现该接口的类有影响。


final

  1. 可以修饰变量或者方法
  2. 当不需要父类的方法被子类覆盖的时候,可以用final
  3. 当不需要类的某个变量名字被修改时候,可以用final,如果一个变量是final,必须初始化,以后不能修改。final修饰的也叫常量!一般用xx_xx_xx命名。
  4. 当不希望被继承时,可以用final修饰类
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值