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

目录

认识

继承相关注意事项:

权限修饰符

单继承,object

方法重写

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

子类构造器特点



认识

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

public class B extends A{

}

(A类为父类,B类为子类) 

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

继承后对象的创建:子类的对象是由子类,父类共同完成的。

带继承关系的类,java如何创建它的对象?

java会用类和其父类这多张设计图来一起创建类的对象。

对象创建出来后,可以直接访问哪些成员?

对象能直接访问什么成员是由子类这多张设计图共同决定的,这多张设计图对外暴露了什么成员,对象就可以访问什么成员。

继承的好处

减少重复代码的编写

public class People {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
public class Teacher extends  People{
    private String skill;

    public String getSkill() {
        return skill;
    }

    public void setSkill(String skill) {
        this.skill = skill;
    }
    public void printInfo(){
        System.out.println(getName() + "具备的技能:" + skill);
    }
}
package com.itheima;

public class Test {
    public static void main(String[] args) {
        Teacher t = new Teacher();
        t.setName("播仔");
        t.setSkill("Java、Spring");
        System.out.println(t.getName());
        System.out.println(t.getSkill());
        t.printInfo();

    }
}

继承相关注意事项:

权限修饰符

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

修饰符在类中同一个包下的其他类里任意包下的子类里任意报下的任意包里
privatey
缺省yy
protectedyyy
publicyyyy

private<缺省 <protected<public

单继承,object

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

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

方法重写

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

其他注意事项:

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

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

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

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

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

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

子类构造器特点

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

子类构造器是如何实现调用父亲构造器的:

  • 默认情况下,子类全部构造器的第一行代码都是super()(写不写都有),它会调用父亲的无参数构造器。
  • 如果父亲没有无参数构造器,则我们必须在子类构造器的第一行手写super(...),指定去调用父亲的有参数构造器。

super(...)调用父亲有参构造器的常见应用场景:

为对象中包含父类这部分的成员变量进行赋值。

子类构造器可以通过调用父亲构造器,把对象中包含父亲这部分的数据先初始化赋值,再回来把对象里包含子类这部分的数据也进行初始化赋值。

补充知识:this(...)调用兄弟构造器

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

this(...)的作用:

        在构造器中调用本类的其他构造器。

this(...)和super(...)都必须放在构造器的第一行。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

neoxyf2005

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值