多态

对象有多种状态。作用:提高程序的可扩展性。

一个对象具备多种状态的能力,这个程序是可扩展的。
前提:
必须有层级关系 继承 实现
继承:子类和父类的关系,一个父类可以有多个子类,说明父类的引用有多种形态
作用类型: 形参、返回值、创建对象

可以将子类的方法重载,也可以直接将方法的形式参数类型改成父类的对象,子类对象向上转型为父类的引用,可以把它理解为类型隐式转换,由低到高。

在多态情况下,无法直接获得子类独有的成员,需要进行强制转换,向下转换为子类的类型,由高到低:

PM pm=(PM)employee;
但是假如方法里面还有其他子类的方法,需要使用instance判断employee对象是否某子类型的

instanceof

判断一个引用是否是一个类的实例

employee instanceof PM
判断employee对象否是PM类型

如果说子类有很多私有属性需要访问,可以使用方法重载来替换

抽象类abstract

每个子类都选择重写该方法,那么说明父类中该方法没有逻辑意义,就可以将该方法变成一个没有方法体的方法,变为抽象方法,且抽象方法在的类为抽象类,因此父类中也需要加上abstract

@Setter
@Getter
public abstract class Pets {
public abstract void fun();
}

抽象类一般出现在继承里面,且作为父类存在,且父类的抽象方法需要在每个子类中重写,抽象类中可以没有抽象方法,但是抽象方法中一定要有抽象类

@Setter
@Getter
public class JiXiangCat extends Pets {
private String name;
@Override
public void fun(){
}
}

抽象类中的属性和方法与普通类一样,但是会存在一个抽象方法,对于抽象方法可以与哪些修饰符一起使用?

public, protected, 默认, 不能加static修饰符

虽然有构造,抽象类不能直接创建对象,抽象类是服务于子类对象创造的,服务多态

使用抽象类创建匿名内部类,需要在创建的对象后面加上抽象方法的重写

public static void main(String[] args) {
Pets pets=new Pets() {
@Override
public void fun() {
}
};//创建匿名内部类对象
}

此时等同于创建了一个子类匿名的内部类对象,且对象类型是pets,如果需要向下调用子类独有的方法和属性,需要将改匿名内部类对象转化成子类型的对象:

 JiXiangCat jiXiangCat=(JiXiangCat)pets;

最新文章

  1. Python【第三章】:python 面向对象 (new)
  2. PHP语法基础
  3. ThinkPHP留后门技巧
  4. 栈的C++实现(数组)——创建-push-pop-top-清空栈-处理栈
  5. linux中防CC攻击两种实现方法(转)
  6. hdu5832 A water problem
  7. Javascript的操作符
  8. IUSR和IIS_IUSRS
  9. [poj 2186]Popular Cows[Tarjan强连通分量]
  10. 不用Google Adsense的84个赚钱方法
  11. hdu 1229 超级大水题
  12. Git学习 -- 管理修改
  13. cycle标签和random两种方式美化表格
  14. 别人的Linux私房菜(9)文件与文件系统的压缩
  15. 常用博客Metaweblog Api地址
  16. [转] 通过jQuery Ajax使用FormData对象上传文件
  17. SVN Update Error: Please execute the 'Cleanup' command
  18. python中的*和**参数传递机制
  19. rpm基本命令参考
  20. redis 批量删除keys

热门文章

  1. HTML 本地缓存
  2. JS 字符串转 GBK 编码超精简实现
  3. EPLAN中的edz文件的用法
  4. FutureTask源码深度剖析
  5. Linux入门操作介绍
  6. DOM及DOM相关操作
  7. C++一些新的特性的理解(二)
  8. [报错]-RuntimeError: Input type (torch.cuda.HalfTensor) and weight type (torch.cuda.FloatTensor) should be the same
  9. 聊聊单点登录(SSO)中的CAS认证
  10. Windows 10中蓝牙鼠标连接