ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

继承与方法的重写

继承与方法的重写 一、继承的概念1. 什么是继承继承是面向对象三大特性之一使用extends关键字让子类派生类拥有父类超类 / 基类的非私有属性和方法。作用提高代码复用性减少重复代码实现代码的扩展。父类存放多个子类共有的公共成员子类除了拥有父类内容还可以写自己独有的属性与方法2. 语法格式//父类 class 父类名{ //公共的属性、方法 } //子类 extends 父类 class 子类名 extends 父类名{ //子类自己独有的属性、方法 }3. 代码示例//父类人存放公共属性行为 class Person{ String name; int age; public void sleep(){ System.out.println(睡觉); } } //子类学生继承Person class Student extends Person{ //子类自己独有的成员 int studentId; public void study(){ System.out.println(学生学习); } } public class ExtendsDemo { public static void main(String[] args) { //创建子类对象 Student s new Student(); //继承得到父类的属性 s.name 张三; s.age 18; //父类的sleep方法直接拿来用 s.sleep(); //子类自己的方法 s.study(); } }4.Java 继承的核心规则【重点】Java 是单继承一个子类只能直接继承一个父类不能extends A,B多继承。父类private私有成员不能直接被子类访问私有只能本类内部使用。可以多层继承A 继承 BB 继承 C形成继承链。所有类直接 / 间接继承java.lang.Object类Object 是所有类的祖宗。易错阐释 private 修饰的属性虽然会被继承到子类对象内存中但是语法上子类不能直接访问要访问需要提供 public 的 get/set 方法。5. 子类对象创建过程new 子类对象的时候会优先执行父类的构造方法再执行子类构造方法。 子类构造方法第一行默认隐藏super()调用父类无参构造。二、方法的重写Override1. 重写概念子类中写一个和父类方法签名完全一样的方法。 当子类觉得父类提供的方法逻辑不适合自己就重写覆盖父类原有逻辑。注意区分 重载 (Overload)同一个类内部方法名相同参数列表不同 重写 (Override)父子类之间方法名、参数列表、返回值完全一致2. 重写语法要求方法名、形参列表必须和父类被重写方法一模一样。返回值类型子类返回值可以等于父类或者是父类返回值的子类协变返回。访问权限子类重写方法权限不能比父类更严格父类 public子类不能写 protected/private。使用注解Override写在方法上方编译期校验是否是正确重写推荐写上。private、static、final 的方法不能被重写。3. 代码示例class Animal{ public void eat(){ System.out.println(动物吃东西); } } //子类Dog继承Animal class Dog extends Animal{ //方法重写Override校验重写是否合法 Override public void eat() { //重写父类eat改成狗自己的逻辑 System.out.println(狗啃骨头); } } public class OverrideDemo { public static void main(String[] args) { Dog dog new Dog(); //调用的是子类重写后的方法 dog.eat(); } }运行输出狗啃骨头重点阐释 创建子类对象调用方法优先执行子类重写后的版本如果子类没有重写才执行父类的方法。4.super 调用父类被重写的方法如果重写后还想在子类内部调用父类原本的方法使用super.方法名()。class Dog extends Animal{ Override public void eat() { //调用父类原来的eat方法 super.eat(); System.out.println(狗啃骨头); } }5. 重写 vs 重载对比表重载 Overload重写 Override位置同一个类当中子类和父类之间方法名必须相同必须相同参数列表必须不同必须完全相同返回值无要求必须相同 / 协变子类权限修饰符无要求子类不能比父类权限更严格注解不需要推荐写Override高频易错小结重写只针对普通成员方法属性不存在重写属性只是隐藏。static 静态方法看上去可以 改写但不是重写只是同名遮蔽。Override 是编译检查写错重写格式直接编译报错开发一定要习惯加上。
返回列表