抽象类,接口与多态

抽象类

定义:只是在普通类的基础上扩充了一些抽象方法。抽象方法就是只声明未实现的方法。

关键字:abstract

1.修饰类,这个类无法被实例化。

2.修饰方法,该方法称为抽象方法,只有方法签名,没有方法实现。只能被他的子类实现

abstract class Person{//抽象类
    public abstract void getName();//抽象方法
}
new A();//编译错误

抽象类使用原则:

  1. 所有抽象类必须有子类
  2. 抽象类的子类必须覆写抽象类的所有抽象方法(子类不是抽象类)
  3. 抽象类的对象可以通过对象多态性利用子类为其实例化
  4. private 与 abstract 不能同时使用
  5. 抽象方法一旦被实现了一次,就不再是抽象方法
  6. 一个类不是抽象的,但是方法是抽象的,那么这个类就不能实例化对象,抽象类里不一定有抽象方法

接口:

定义:接口就是抽象方法和全局变量的集合,出现的目的是体现封装性,Java中使用 interface 关键字定义。

interface 接口名称 [extends 其他接口]{//多继承
    void method();//抽象方法,默认修饰符 public abstract
    int a = 10;//默认修饰符 public static final
    static void staticMethod(){//静态方法
    }
    default void method(){//接口中的默认方法
    }
}

1.接口中只允许 public 权限

2.当一个子类即需要实现接口又需要继承抽象类时,请先使用 extends 继承一个抽象类,而后使用 implement实现多个接口。接口允许多继承

3.一个抽象类可以使用 implements 实现多个接口,但是接口不能继承抽象类。

4.接口无法去实例化对象

5.接口中给出的方法列表默认

  1. public 访问限定符修饰的
  2. 无法使用 static 修饰符(有特例)
  3. 是一个抽象方法,直接用分号结尾,不用给出方法体

6.接口中不能出现属性(可以出现,默认被 final static 修饰)

 

语法:类实现接口的语法,写在定义类的时候。

多态

方法的多态性:
①方法的重载:同一个方法名称可以根据参数的类型或个数不同调用不同的方法体。
②方法的覆写:同一个父类的方法,可能根据实例化子类的不同也有不同的实现。
对象的多态性(前提:方法覆写):
【自动,90%】①对象的向上转型:父类 父类对象 = 子类实例
【强制, 1%】②对象的向下转型:子类 子类对象 =(子类)父类实例

1.父类类型的引用可以指向子类的对象。(向上转型,把引用类型转换成另一个引用类型,类型层级属于上层的)。

引用有引用自己的类型:

(1)接口类型的引用:指向实现接口的类类型的引用

(2)类类型的引用:指向本类或者本类的子类的类类型的对象

(3)数组类型的引用

表现:

 

//只有非抽象类的类型能被实例化
List p = new ArrayList();
AbstractList q = new ArrayList();
ArrayList a = new ArrayList();
//以返回值类型体现
List getList(){
    return new ArrayList();
}
//以参数体现
void list(List l){    }

2.在编译期间,可以调用的方法列表,是根据引用的类型来决定。

3.运行期间,真正执行的普通方法,以实际执行的对象类型为准。真正的静态方法,以引用类型为准。

向下转型:指的是将父类对象变为子类对象,为什么我们需要向下转型?当需要子类扩充操作的时候(使用只有子类型独有的方法)就要采用向下转型。

List a = new ArrayList();//需要调用只有ArrayList支持的方法
ArrayList b = (ArrayList)a;//需要强制类型转换
//需要保证 a 指向的对象,可以被 ArrayList 引用指向(是 ArrayList 的子类类型的对象)

练习

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值