抽象,多态与接口

2019.8.11

抽象

  • 抽象是不能被实例化的类
  • 当我们不需要类的实例的时候,就可以将类设计为抽象类。
  • 关键字是abstract
  • 语法是public abstract class 类名{
    }
  • 抽象方法的语法是public abstract void show();
  • 抽象方法不需要写方法体,子类也要重写该方法,除非子类也是抽象的
  • 将一个方法声明为抽象方法的时候,类也必须声明成抽象类
  • 当有新的子类添加时,不会对其他类产生影响。
  • 抽象类一般调用没有意义,只有子类重写后才产生意义

多态

  • 一个对象有多种形式的能力,一个类的子类可以定义它们唯一的行为,同时共享父类的某些相同特征就是多态
  • 因为java只允许单继承,子类与父类间有IS-A的关系
  • 定义格式:父类类型 变量名=new 子类类型();

成员变量的访问特点

  • 编译看左边,运行看右边
  • 编译的时候要看等号左边引用的类型中,是否有该变量的定义,如果有就成功,没有就失败
  • 运行的时候,要看等号左边引用的所属类型中,真正如何给变量赋值的。获取的是引用父类的赋值结果

成员方法的访问特点

  • 编译看左边,运行看右边
  • 运行的时候,要看等号右边的对象所属的类型中,是如何实现这个方法的,最终运行的是子类重写过的方法实现。
  • 编译的时候要看等号左边的引用所属的类型中,是否有该变量的定义,如果有就成功,没有就失败

多态中静态方法的访问特点

  • 编译看左边,运行看左边
  • 编译的时候要看等号左边的引用所属的类型中,是否有该变量的定义,如果有就成功,没有就失败
  • 运行的时候,要看等号左边的引用所属的类型中,是如何实现该方法的。最终运行的是引用所属类型中该方法的实现。(方法属于类,和父类的方法不属于重写关系)

转型

  • 向上转型后不能调用子类的方法,除了重写的方法。
  • 向上转型的语法:父类类型 变量名=new 子类类型();
  • 向下转型的语法:子类对象 对象名=(子类对象)向上转型的对象名称
  • 向上转型都是安全的,但是向下还原不正确就会产生一个错误,要用instanceof 判断是否能够强转:对象名 instanceof 对象类型

多态的两种体验形式

  • 以父类作为参数
  • 以父类作为返回值

接口

接口的特点

  • 接口中的方法必须全部是抽象方法

  • 接口也可以拥有方法跟属性,但是在接口中声明的方法默认是抽象的

  • 一个接口就是描述一种能力,接口的作用是告诉类,你要实现我这种接口代表的功能,你就必须实现某些方法,我才能承认你确实拥有该接口代表的某种能力。

  • 语法是 public interface 接口的名称{
    }

  • 接口中不能由普通方法,接口中没有构造方法

  • 接口不能由变量,只能有常量。

疑问

为什么不都用接口,还要用继承

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值