当前位置:网站首页>继承和多态的总结
继承和多态的总结
2022-08-11 11:51:00 【Bruce1801】
一、继承
继承的细节
- 一个类可以被多个类继承,所有公共部分(方法,属性)都被继承,私有部分不能被继承。
- 一个类只能有一个父类(单继承)。可以被很多类继承。
- 继承的本质:代码复用,在原有的类型上进行扩展。
- 当new一个子类时,需要在子类构造方法的第一行写上super(…)。原因是父类对象是优先于子类被加载的。
- 由于子类的构造器不能访问父类的私有域,所以必须利用父类的构造器对这部分私有域进行初始化。我们可以通过super实现对超类构造器的调用。使用super调用构造器的语句必须是子类构造器的第一句。
- 如果子类的构造器没有显式的调用超类的构造器,则将自动地调用超类没有参数的构造器。如果超类没有不带参数的构造器,并且在子类的构造器中又没有显式地调用超类地其他构造器,则java编译器将报告错误。
- super关键字有两个用途:
- 调用超类的方法。
- 调用超类的构造器
二、多态
- 多态的前提是继承和存在子类对超类方法的重写
- 父类的句柄可以指向子孙后代类的对象
- 多态常用场景为:父类对象指向后代的地址(值传递)
向上转型:父类对象指向子类对象
- 形式:Parent p=new Child();
- 当要执行父类方法时,如果子类对该方法进行了重写,则执行子类中重写后的方法。
- 当要调用父类中的变量时,调用的都是父类自身的变量。
示例
- 父类
package test1;
public class Father {
public int age=40;
public int year=18;
public int money=188888;
public Father() {
}
public void say() {
System.out.println("我是父类");
}
}
- 子类1
package test1;
public class stu1 extends Father {
private int money=30;
public stu1() {
super();//显式地调用超类的无参构造器
}
//重写超类的say方法
public void say() {
System.out.println("我是stu1");
}
}
- 子类2
package test1;
public class stu2 extends Father{
public int money=20;
public stu2() {
super();//显式地调用超类的无参构造器
}
//重写超类的say方法
public void say() {
System.out.println("我是stu2");
}
}
- 测试类
package test1;
public class test {
public static void main(String[]args) {
Father fa=new stu1();//实现多态
Father fa2=new Father();//创建超类对象
System.out.println(fa.money);//打印超类的属性
fa.say();//执行子类重写后的方法
fa2.say();//执行超类的方法
}
}
结果为:
强制类型转换
- 关键字instanceof
判断前面的对象是否是后面类的实例或后面类的子孙后代类的实例;
一般在代码编写时,instanceof判断之后符合条件才能进行强制类型转换。 - 始终不违背:父类的句柄=自己类的对象或者子孙后代类的对象。
边栏推荐
猜你喜欢
随机推荐
基本sql语句1--查询基础
requestAnimationFrame的应用
Flutter经验整理
单峰函数极值问题的解决方案 : 三分 & 二分与三分的本质区别
《公共管理学》重点总结-陈振明版
锂电池充电芯片IC
观视界Grandvision EDI项目案例
【剑指offer-牛客网刷题】第一篇-斐波拉契数列-C实现
【数字赛道命题三】基于复旦微FPGA平台实现H.264视频解码
SD8016原厂单电池锂离子电池和锂聚合物电池充电IC
全网最全的权限系统设计方案(图解)
img图片加载错误时显示默认图片
EastWave Application: Live Demonstration of Negative Refraction Phenomenon
音频分享系统(类听书系统)
请求转发与重定向
【集创赛】arm杯一等奖作品:智能BLDC驱动系统
TX12 + ExpressLRS 915MHz RC控制链路配置及问题汇总
A043:做好芯片设计,这三种能力不可或缺
d共享左值
【数学】几何在线画图