面向对象三大特征之二:继承

2023-12-15 18:36:47

继承的快速入门

什么是继承?

  • Java中提供了一个关键字extends,用这个关键字,可以让一个类与另一个类建立起父子关系

继承的特点

  • 子类能继承父类的非私有成员(成员变量、成员方法)

继承后对象的创建

  • 子类的对象是由子类、父类共同完成的

A类

//父类
public class A {
    //公开成员
    public int i;
    public void print1(){
        System.out.println("====print1====");
    }

    //私有成员
    private int j;
    private void print2(){
        System.out.println("====print2====");
    }
}

B类

//子类
public class B extends A{
    private int k;
    public void print3(){
        //子类可以继承父类的非私有成员
        System.out.println(i);
        print1();
        //System.out.println(j); //报错
        //print2(); //报错
    }
}

Test类

public class Test {
    public static void main(String[] args) {
        // 目标:认识继承,掌握继承的特点
        B b = new B();
        System.out.println(b.i);
        //System.out.println(b.j); //报错
        //System.out.println(b.k); //报错

        b.print1();
        //b.print2(); //报错
        b.print3();
    }
}

使用继承的好处

  • 减少重复代码的编写

案例需求:

? ? ? ? 某员工系统中需要处理员工和讲师的数据

People类

public class People {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

Teacher类

public class Teacher extends People{
    private String skill;

    public String getSkill() {
        return skill;
    }

    public void setSkill(String skill) {
        this.skill = skill;
    }

    public void ptintInfo(){
        System.out.println(getName() + "具备的技能:" + skill);
    }
}

Test类

public class Test {
    public static void main(String[] args) {
        //目标:搞清继承的好处
        Teacher t = new Teacher();
        t.setName("张三");
        t.setSkill("java、String");
        System.out.println(t.getName());
        System.out.println(t.getSkill());
        t.ptintInfo();
    }
}

继承相关的注意事项

权限修饰符

什么是权限修饰符

  • 就是用来限制类中的成员(成员变量、成员方法、构造器、代码块……)能够被访问的范围

权限修饰符由几种?各自的作用是什么?

修饰符在本类中在同一包下的其他类里在任意包下的子类里任意包下的任意类里
private
缺省
protected
public

单继承、Object?

Java是单继承的,Java中的类不支持多继承,但是支持多层继承

Object类

  • Object类是Java所有类的祖宗类。我们写的任何一个类,其实都是object的子类或者子孙类

方法重写

什么是方法重写?

  • 当子类觉得父类中的某个方法不好用,或者无法满足自己的需求时,子类可以重写一个方法名称、参数列表一样的方法,去覆盖父类的这个方法,这就是方法重写。
  • 注意:重写后,方法的访问,Java会遵循就近原则。

方法重写的其它注意事项

  • 重写小技巧:使用Override注解,他可以指定Java编译器,检查我们的方法重写的格式是否正确,代码可读性也会更好
  • 子类重写父类方法时,访问权限必须大于或等于父类该方法的权限(public>protected>缺省)
  • 重写的方法返回值类型,必须与被重写方法的返回值类型一样,或者范围更小
  • 私有方法、静态方法不能被重写,如果重写会报错

方法重写在开发中的常见应用场景

  • 子类重写Object类的toString()方法,以便返回对象的内容。

子类中访问其他成员的特点

1、在子类方法中访问其他成员(成员变量、成员方法),是依照就近原则的。

  • 先子类局部找范围
  • 然后子类成员范围找
  • 然后父类成员范围找,如果父类范围还没有找到则报错

2、如果父类中,出现了重名的成员,会优先使用子类的,如果此时一定要在子类中使用父类的怎么办?

  • 可以通过super关键字,指定访问父类的成员:super.父类成员变量/父类成员方法

子类构造器的特点

  • 子类的全部构造器,都会先调用父类的构造器,在执行自己。

补充:this(…)调用兄弟构造器

  • 在任意的构造器中,都可以通过this(…)去调用该类的其他构造器。

this(…)和super(…)使用时的注意事项

  • this(…)和super(…)都只能放在构造器的第一行,因此,有了this(…)就不能写super(…)了,反之亦然。

文章来源:https://blog.csdn.net/SU_mu147/article/details/134996615
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。