day11-面型对象(中)-1
1、 什么是多态性?什么是虚拟方法调用?
多态性可以理解为一个事物的多种形态,Java中的多态是对象的多态性:父类引用指向子类对象
对于多态,调用方法时,在编译期间调用的是父类的方法,在运行期间实际调用的是子类重写的方法,即编译时看左边,运行时看右边
2、 一个类可以有几个直接父类?一个父类可有多少个子类?子类能获取直接父类的父类中的结构吗?子类能否获取父类中private权限的属性或方法?
一个类只能有一个直接父类
一个父类可以有多个子类
子类可以获取直接父类的父类中的结构
对于private权限、缺省权限且子父类不在同一个包下,父类的结构子类不能直接获取和调用,可以间接的获取和调用,比如父类提供的get set方法获取属性,在父类提供的public方法中调用private修饰的方法
3、方法的重写(override/overwrite)的具体规则有哪些?
子类重写方法的方法名和形参列表和父类被重写方法的方法名和形参列表相同
子类重写方法的的权限修饰符不能小于父类被重写方法的权限修饰符
父类方法的返回值如果是基本数据类型,则子类要保持一致,如果是引用数据类型,例如A类型,子类方法的返回值类型必须是A类型或A类型的子类型
子类重写方法抛出的异常类型不能大于父类被重写方法抛出的异常类型
4、super调用构造器,有哪些具体的注意点
声明位置位必须在子类构造器的首行
子类的构造器中,this(形参列表) 或 super(形参列表) 只能二选一
没有显式的声明 this(形参列表) 或 super(形参列表),子类构造器的首行默认调用的是super() 空参的构造器
一个类中,肯定至少有一个构造器中使用了super() 空参构造器
5、 在下面的代码结构中:使用关键字:this,super;方法的重写;继承;



/** * @author: huxingxin * @date: 2022/12/9 8:52:22 */ public class CylinderTest { public static void main(String[] args) { Circle circle = new Circle(2); double area = circle.findArea(); System.out.println("圆的面积: " + area); Cylinder cylinder = new Cylinder(2, 2); double area1 = cylinder.findArea(); double volume = cylinder.findVolume(); System.out.println("圆柱的表面积: " + area1); System.out.println("圆柱的表面积: " + volume); } }
/** * @author: huxingxin * @date: 2022/12/8 17:22:30 */ public class Circle { private double radius; public Circle() { radius = 1; } public Circle(double radius) { this.radius = radius; } public double getRadius() { return radius; } public void setRadius(double radius) { this.radius = radius; } /** * 计算圆的面积 * @return 返回计算圆的面积 */ public double findArea(){ return Math.PI * Math.pow(radius, 2); } }
/** * @author: huxingxin * @date: 2022/12/8 17:22:38 */ public class Cylinder extends Circle{ private double length; public Cylinder() { length = 1; } public Cylinder(double length) { this.length = length; } public Cylinder(double radius, double length) { super(radius); this.length = length; } public double getLength() { return length; } public void setLength(double length) { this.length = length; } /** * 计算圆柱的表面积 * @return 返回圆柱的表面积 */ @Override public double findArea() { return super.findArea() * 2 + 2 * Math.PI * getRadius() * length; } /** * 计算圆柱的体积 * @return 返回圆柱的体积 */ public double findVolume(){ return super.findArea() * length; } }
本文作者:huxingxin
本文链接:https://www.cnblogs.com/huxingxin/articles/16975031.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)