继承
访问修饰符 class 子类名 extends 父类名 {
方法体;
}
1、父类 / 基类 / 超类;子类 / 派生类
2、子类继承父类所有属性、方法(包括 private)
(1)子类可以访问父类非 private 属性、方法
(2)子类不可以直接访问父类 private 方法、private 属性
(3)子类可以通过父类的非 private 方法,访问父类的 private 属性、private 方法
3、构造器不能被继承,构造器只能被显式或隐式地调用
(1)子类构造器必须调用父类构造器,完成父类初始化
(2)创建子类对象时,不论子类调用哪个构造器,默认情况下隐式调用父类的无参构造器
(3)若父类没有提供无参构造器,则子类构造器需要使用 super,显式调用父类的某一个构造器,完成父类初始化
4、Java 中的 Object 类是所有类的父类
5、调用父类构造器不限于直接父类,可以一直向上追溯到 Object 类
6、Java 是单继承机制,子类最多只能继承一个直接父类
7、Java 的静态属性、静态方法可以被继承
(1)但是静态方法不能被子类重写,无法实现多态,子类中可以定义与父类相同的静态方法,此时只是将父类中的方法隐藏,而不是重写它
(2)静态方法和静态属性没有采用动态绑定:将子类实例向上转型则会调用到基类中的静态方法和属性,不转型就调用子类自身的静态方法和属性
(3)编译器不推荐通过实例去调用静态方法和属性,因为这种调用方式容易造成混淆
8、同名属性隐藏机制
(1)在具有父子关系的两个类中,子类中相同名字的属性会使得从父类中继承过来的同名属性变得不可见
(2)不管类型是否一致,名称一致的两个属性就是同名属性
(3)在子类中,无法简单地通过属性名称来获取父类中的属性,而是必须通过父类名称加属性名称(super.变量名)才可以访问父类中的该属性
(4)一般而言,为了代码容易阅读,极其不建议在父类和子类中使用同名属性
查找关系
1、访问类成员的顺序:先查看本类是否存在该成员,若存在,则直接访问;若不存在,则向上一级查找,即在直接父类查找,以此类推,直到 Object 类
(例)
class GrandFather {
public int age = 70;
}
class Father extends GrandFather {
private int age = 40;
}
class Son extends Father {
}
2、以 Son 类对象访问 age,Son 类中没有 age,向上查找,但 Father 类中的 age 为 private,不能直接访问,即使 GrandFather 类中存在 age,但不能访问,即 Son 类对象无法访问任何 age 属性
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战