什么是多态

多态是指实例方法根据调用者会有不同的表现,就像多种形态一样。这里要注意的是:静态方法没有多态的说法。

可以看到,虽然都是 Person 类,但是 p1 是真正的 Person,而 p2 是 Person 的子类,子类中又 Override 了父类的方法,所以虽然看上去都是调用 sayHi 方法,但是有着不同的表现,这就是多态的体现了。

什么是抽象类

抽象类的本质仍然是个类,所以类可以有的东西,它也可以有,此外它还可以声明抽象方法。

声明抽象方法应该要注意:

  1. 抽象方法不能是 private 或者是 static. 这个也可以理解。

    1. 如果是 private 的话,那么子类就无法重写了。
    2. 如果是 static 的话,那就意味着可以被直接调用,但是很明显抽象方法没有方法体,不能被直接调用。

为什么要使用抽象类

先假设我们没有抽象类,我们要实现一个需求:

有一个 Person 类,他有 sayHi 方法,供子类使用,还有一个 work 方法,由于不知道子类的具体实现,所以留空。

那么我们会写出这样的代码:

但是即使子类不重写的话,编译不会报错,那如果我们改成抽象类的话,子类就必须实现。

所以抽象类就像是「模板方法」,它预留了几个方法空位,让子类自行实现。

什么是接口

如果一个抽象类中的方法都是抽象方法,那么就应该可以把它声明为接口。

接口中也可以包含成员,但是成员都是 public static final 的,即常量

我们在 IDEA 中写的时候,会看到它显示灰色,那么就表示我们不用显式地声明。

为什么要使用接口

我们都知道,Java 中的类只能继承一个类。有时候我们会遇到一些非常“不同寻常”的需求:

  1. 一个 Person 类。
  2. 一个 Programer 类继承 Person。
  3. 一个 Teacher 类继承 Person。
  4. 问题来了,如果我想要一个「会编程的老师」怎么办...

Java 中一个类可以实现多个接口,所以弥补了这个短板。

但是接口有一个非常非常明显的弊端:接口一旦发布,就无法更改了。

怎么理解这句话呢?比如 A 接口有 B、C、D 三个方法,那么我继承了 A 接口并且实现了这些方法。假如有一天 A 接口要增加一个 E 方法,如果我不跟着改动,那么我的代码就报错了,因为实现接口的时候必须要实现接口的所有抽象方法。

为了这个问题,Java8 引入了接口的默认方法。但是在传统的面向对象编程的思想中,接口应该只包含抽象方法。

内部类和静态内部类

内部类是指我们在类中又定义了一个类,一般是起到更好的封装效果。

内部类可以选择是否用 static 修饰符来修饰,两者的区别就是是否包含一个外部类的引用,非静态内部类是包含外部类的引用的,而静态内部类是不包含外部类的引用的。

我们推荐使用「静态内部类」,因为可以减少大小,如果编译报错,那么就去掉 static 修饰符。

idea 查看一个类的子类_Java-05-多态、抽象类、接口和内部类相关推荐

  1. java自学 part2 数组 类和对象 包 继承 多态 抽象类 接口

    数组:arr 获取数组的长度:arr.length 数组转字符串: Arrays.toString(arr) 数组的拷贝: Arrays.copyOf(arr,arr.length) 数组的排序:Ar ...

  2. IntelliJ IDEA 中如何查看一个类的所有继承关系,包括父类与子类

    IntelliJ IDEA 中如何查看一个类的所有继承关系,包括父类与子类 查看当前类所有的父类 查看当前所有的子类 查看当前类所有的父类 1.找到当前类所在的位置,右键选择Diagrams,然后选择 ...

  3. Mac idea使用Command + p 快捷键查看一个类的构造函数需要传入什么参数

    Mac idea使用Command + p 快捷键查看一个类的构造函数需要传入什么参数 如下图所示

  4. idea查看一个类的所有子类_java new一个对象的过程中发生了什么

    java在new一个对象的时候,会先查看对象所属的类有没有被加载到内存,如果没有的话,就会先通过类的全限定名来加载.加载并初始化类完成后,再进行对象的创建工作. 我们先假设是第一次使用该类,这样的话n ...

  5. python定义一个类和子类_Python面向对象class类属性及子类用法分析

    本文实例讲述了Python面向对象class类属性及子类用法.分享给大家供大家参考,具体如下: class类属性 class Foo(object): x=1.5 foo=Foo() print fo ...

  6. java定义一个类显示没有_Java 中的每个类都至少有一个构造方法,一个类中如果没有定义构造方法,系统会自动为这个类创建一个默认的构造方法。_学小易找答案...

    [单选题]关于 Java 语言叙述错误的是( ). [判断题]类中 static 修饰的变量或方法,可以使用类名或对象的引用变量访问. [命名题]命名下列化合物, [单选题]急性胰腺炎的主要临床表现是 ...

  7. java怎么调用另一个类的方法_Java设计模式:十篇,代码小白必看

    Java设计模式(一)----单例模式 一.特点: 1.单例类只能有一个实例. 2.单例类必须自己创建自己的唯一实例. 3.单例类必须给所有其他对象提供这一实例. 单例模式确保某个类只有一个实例,而且 ...

  8. idea中如何查看一个类的方法被那些类调用了,显示方法对应的调用树

    idea更新版本后,可能以前熟悉的快捷键就不大好使了,并且,idea的配置还是很多的.今天我想查看一个方法被其它那些方法对象调用时,使用alt+7或者alt+f7都不好使,但使用idea对应的菜单栏工 ...

  9. java怎么调用另一个类的方法_java如何调用另一个类的方法

    java调用另一个类的方法:1.类方法用static修饰,代码为[public static void sayStatic()]:2.没有static修饰的方法,代码为[ public void sa ...

最新文章

  1. 2D图像转3D仅需5秒,特斯拉的自动驾驶技术有救了?
  2. java B2B2C 仿淘宝电子商城系统-Spring Cloud Feign的文件上传实现
  3. 进程线程003 模拟线程切换
  4. gentoo rt-thread scons --menuconfig libs/lxdialog/util.o: undefined reference to symbol 'nodelay'
  5. #ifdef #else #endif 的用法
  6. picturectrl控件中加载图片并显示_如何在EasyX窗体中显示图片
  7. 与php有区别_php://output和php://stdout的区别
  8. 手机psp模拟器哪个好_功能强大,手机微信群控系统和云控哪个好?
  9. 怎样用html制作动态心,利用html+css3制作心的跳动动画
  10. 第十一:Pytest进阶之conftest.py
  11. 怎么看铜皮属性_阻抗匹配怎么做 及阻抗匹配的作用。
  12. Polyverse Infected Mushroom Bundle Mac(声音处理器插件包)
  13. 30分钟学习掌握springmvc、SSM
  14. 地理空间坐标系统-城市坐标系与国家统一坐标系之间的转换(含四参数转换代码)
  15. 电脑技巧:Win10电脑卡顿解决小技巧,非常实用
  16. python小欢喜(八)俄罗斯方块 (3) 组合对象的旋转
  17. windows10如何关闭cortana
  18. 天使投资人刘峻:腾讯的七条命 |捕手志
  19. Linux创建 Raid卷
  20. feign+hystrix相关超时时间配置问题

热门文章

  1. 手持GPS坐标系统的转换与应用
  2. 微软发布的python教程_微软发布Python 教程《Develop with Python on Windows》
  3. python 等比例缩放图片 自写
  4. 2.4 理解指数加权平均-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授
  5. Scan Chain的原理与实现(实践) - Compression Flow
  6. 雅客EXCEL(5)-tab键、同组数据录入、提取重复值、提取身份证号码的出生日期
  7. 【PC工具】智能抠图软件,绿色免安装抠图神奇抠图工具
  8. 十四、Linux进程编程
  9. 聊聊flink的Tumbling Window
  10. web服务器(LAMP)通过DNS轮询功能和nfs共享实现负载均衡