idea 查看一个类的子类_Java-05-多态、抽象类、接口和内部类
什么是多态
多态是指实例方法根据调用者会有不同的表现,就像多种形态一样。这里要注意的是:静态方法没有多态的说法。
可以看到,虽然都是 Person 类,但是 p1 是真正的 Person,而 p2 是 Person 的子类,子类中又 Override 了父类的方法,所以虽然看上去都是调用 sayHi 方法,但是有着不同的表现,这就是多态的体现了。
什么是抽象类
抽象类的本质仍然是个类,所以类可以有的东西,它也可以有,此外它还可以声明抽象方法。
声明抽象方法应该要注意:
- 抽象方法不能是 private 或者是 static. 这个也可以理解。
- 如果是 private 的话,那么子类就无法重写了。
- 如果是 static 的话,那就意味着可以被直接调用,但是很明显抽象方法没有方法体,不能被直接调用。
为什么要使用抽象类
先假设我们没有抽象类,我们要实现一个需求:
有一个 Person 类,他有 sayHi 方法,供子类使用,还有一个 work 方法,由于不知道子类的具体实现,所以留空。
那么我们会写出这样的代码:
但是即使子类不重写的话,编译不会报错,那如果我们改成抽象类的话,子类就必须实现。
所以抽象类就像是「模板方法」,它预留了几个方法空位,让子类自行实现。
什么是接口
如果一个抽象类中的方法都是抽象方法,那么就应该可以把它声明为接口。
接口中也可以包含成员,但是成员都是 public static final 的,即常量。
我们在 IDEA 中写的时候,会看到它显示灰色,那么就表示我们不用显式地声明。
为什么要使用接口
我们都知道,Java 中的类只能继承一个类。有时候我们会遇到一些非常“不同寻常”的需求:
- 一个 Person 类。
- 一个 Programer 类继承 Person。
- 一个 Teacher 类继承 Person。
- 问题来了,如果我想要一个「会编程的老师」怎么办...
Java 中一个类可以实现多个接口,所以弥补了这个短板。
但是接口有一个非常非常明显的弊端:接口一旦发布,就无法更改了。
怎么理解这句话呢?比如 A 接口有 B、C、D 三个方法,那么我继承了 A 接口并且实现了这些方法。假如有一天 A 接口要增加一个 E 方法,如果我不跟着改动,那么我的代码就报错了,因为实现接口的时候必须要实现接口的所有抽象方法。
为了这个问题,Java8 引入了接口的默认方法。但是在传统的面向对象编程的思想中,接口应该只包含抽象方法。
内部类和静态内部类
内部类是指我们在类中又定义了一个类,一般是起到更好的封装效果。
内部类可以选择是否用 static 修饰符来修饰,两者的区别就是是否包含一个外部类的引用,非静态内部类是包含外部类的引用的,而静态内部类是不包含外部类的引用的。
我们推荐使用「静态内部类」,因为可以减少大小,如果编译报错,那么就去掉 static 修饰符。
idea 查看一个类的子类_Java-05-多态、抽象类、接口和内部类相关推荐
- java自学 part2 数组 类和对象 包 继承 多态 抽象类 接口
数组:arr 获取数组的长度:arr.length 数组转字符串: Arrays.toString(arr) 数组的拷贝: Arrays.copyOf(arr,arr.length) 数组的排序:Ar ...
- IntelliJ IDEA 中如何查看一个类的所有继承关系,包括父类与子类
IntelliJ IDEA 中如何查看一个类的所有继承关系,包括父类与子类 查看当前类所有的父类 查看当前所有的子类 查看当前类所有的父类 1.找到当前类所在的位置,右键选择Diagrams,然后选择 ...
- Mac idea使用Command + p 快捷键查看一个类的构造函数需要传入什么参数
Mac idea使用Command + p 快捷键查看一个类的构造函数需要传入什么参数 如下图所示
- idea查看一个类的所有子类_java new一个对象的过程中发生了什么
java在new一个对象的时候,会先查看对象所属的类有没有被加载到内存,如果没有的话,就会先通过类的全限定名来加载.加载并初始化类完成后,再进行对象的创建工作. 我们先假设是第一次使用该类,这样的话n ...
- python定义一个类和子类_Python面向对象class类属性及子类用法分析
本文实例讲述了Python面向对象class类属性及子类用法.分享给大家供大家参考,具体如下: class类属性 class Foo(object): x=1.5 foo=Foo() print fo ...
- java定义一个类显示没有_Java 中的每个类都至少有一个构造方法,一个类中如果没有定义构造方法,系统会自动为这个类创建一个默认的构造方法。_学小易找答案...
[单选题]关于 Java 语言叙述错误的是( ). [判断题]类中 static 修饰的变量或方法,可以使用类名或对象的引用变量访问. [命名题]命名下列化合物, [单选题]急性胰腺炎的主要临床表现是 ...
- java怎么调用另一个类的方法_Java设计模式:十篇,代码小白必看
Java设计模式(一)----单例模式 一.特点: 1.单例类只能有一个实例. 2.单例类必须自己创建自己的唯一实例. 3.单例类必须给所有其他对象提供这一实例. 单例模式确保某个类只有一个实例,而且 ...
- idea中如何查看一个类的方法被那些类调用了,显示方法对应的调用树
idea更新版本后,可能以前熟悉的快捷键就不大好使了,并且,idea的配置还是很多的.今天我想查看一个方法被其它那些方法对象调用时,使用alt+7或者alt+f7都不好使,但使用idea对应的菜单栏工 ...
- java怎么调用另一个类的方法_java如何调用另一个类的方法
java调用另一个类的方法:1.类方法用static修饰,代码为[public static void sayStatic()]:2.没有static修饰的方法,代码为[ public void sa ...
最新文章
- 2D图像转3D仅需5秒,特斯拉的自动驾驶技术有救了?
- java B2B2C 仿淘宝电子商城系统-Spring Cloud Feign的文件上传实现
- 进程线程003 模拟线程切换
- gentoo rt-thread scons --menuconfig libs/lxdialog/util.o: undefined reference to symbol 'nodelay'
- #ifdef #else #endif 的用法
- picturectrl控件中加载图片并显示_如何在EasyX窗体中显示图片
- 与php有区别_php://output和php://stdout的区别
- 手机psp模拟器哪个好_功能强大,手机微信群控系统和云控哪个好?
- 怎样用html制作动态心,利用html+css3制作心的跳动动画
- 第十一:Pytest进阶之conftest.py
- 怎么看铜皮属性_阻抗匹配怎么做 及阻抗匹配的作用。
- Polyverse Infected Mushroom Bundle Mac(声音处理器插件包)
- 30分钟学习掌握springmvc、SSM
- 地理空间坐标系统-城市坐标系与国家统一坐标系之间的转换(含四参数转换代码)
- 电脑技巧:Win10电脑卡顿解决小技巧,非常实用
- python小欢喜(八)俄罗斯方块 (3) 组合对象的旋转
- windows10如何关闭cortana
- 天使投资人刘峻:腾讯的七条命 |捕手志
- Linux创建 Raid卷
- feign+hystrix相关超时时间配置问题
热门文章
- 手持GPS坐标系统的转换与应用
- 微软发布的python教程_微软发布Python 教程《Develop with Python on Windows》
- python 等比例缩放图片 自写
- 2.4 理解指数加权平均-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授
- Scan Chain的原理与实现(实践) - Compression Flow
- 雅客EXCEL(5)-tab键、同组数据录入、提取重复值、提取身份证号码的出生日期
- 【PC工具】智能抠图软件,绿色免安装抠图神奇抠图工具
- 十四、Linux进程编程
- 聊聊flink的Tumbling Window
- web服务器(LAMP)通过DNS轮询功能和nfs共享实现负载均衡