Java基础之继承

举报
袁袁袁袁满 发表于 2022/04/11 19:58:10 2022/04/11
【摘要】 1.0 继承概述继承是面向对象三个特征之一。可以使子类具有父类的属性和方法,还可以在子类重新定义,追加属性和方法。继承的格式public class 子类名 extends 父类名{}public class Zi extends Fu{}Fu:是父类,也称基类、超类Zi:是子类,也称派生类 1.1 继承的好处提高了代码的 复用性(多个类相同的成员可以放到同一类中)提高了代码的 维护性(修...

1.0 继承概述

  • 继承是面向对象三个特征之一。可以使子类具有父类的属性和方法,还可以在子类重新定义,追加属性和方法。
  • 继承的格式
public class 子类名 extends 父类名{}

public class Zi extends Fu{}
  • Fu:是父类,也称基类、超类
  • Zi:是子类,也称派生类

1.1 继承的好处

  • 提高了代码的 复用性(多个类相同的成员可以放到同一类中)
  • 提高了代码的 维护性(修改一处多处修改)

1.2 继承的弊端

  • 继承让父类和子类产生了关系,当父类发生改变时子类也会改变,削弱了 子类的独立性

1.3 什么时候用继承

  • 继承的关系体现为 包含
  • 假设:我有两个A和B类,如果他们满足A是B的一种,或者B是A的一种,就说明他们存在继承关系,这个时候可以用继承了,否则就不能滥用继承
  • 举例:苹果和水果、猫和动物就可以用继承;猫和狗就不行

1.3 继承中变量的访问特点

  • 在子类中访问一个变量
    • 先在子类局部变量中找
    • 子类成员范围中找
    • 父类成员范围中找
    • 如果都没有就报错(不考虑父亲的父亲)
  • 范例
  • 父类
package ceshi;

public class Fu {
    public int age=20;
}
  • 子类
package ceshi;

public class Zi extends Fu{
    public int height=175;
    public int age = 30;
    public void show(){
        int age =40;
        System.out.println(age); //40
        System.out.println(height);
        //System.out.println(weight); //报错
    }
}

1.4 super关键字

  • super 关键字和 this 关键字用法相似
  • this:代表本类对象的引用
  • super:代表父类对象引用
    在这里插入图片描述
  • 案例
  • 父类
package ceshi;

public class Fu {
    public int age=20;
}
  • 子类
package ceshi;

public class Zi extends Fu{
    public int age = 30;
    public void show(){
        int age =40;
        System.out.println(age); //40
        //1.访问本类中的成员变量age
        System.out.println(this.age); //30
        //2.访问父类中的成员方法
        System.out.println(super.age); //20
    }
}

1.5 继承中构造方法的访问特点

  • 子类中所有构造方法默认都会访问父类中的无参构造方法
  • 为什么呢
    • 因为子类会继承父类中的数据,可能还会使用父类中的数据。所以子类初始化前,一定要完成父类初始化
    • 每一个子类构造方法第一句默认都是:super();
  • 如果父类有没无参构造方法,只有带参构造方法,怎么办呢
    • 通过super关键字去调用带参构造方法
    • 在父类自己提供一个无参构造方法(推荐使用)
  • 案例
  • 父类
package ceshi;

public class Fu {
    /*public Fu() {
        System.out.println("Fu中无参构造方法");
    }*/
    public Fu(){};
    public Fu(int age) {
        System.out.println("Fu中带参构造方法");
    }
}
  • 子类
package ceshi;

public class Zi extends Fu{
    public Zi() {
//        super(); //默认有所以不用写
        System.out.println("Zi中无参构造方法");
    }
    public Zi(int age) {
//        super();
        System.out.println("Zi中带参构造方法");
    }
}

1.6 继承中成员方法的访问特点

  • 通过子类访问一个方法
    1.先在子类成员范围找
    2.父类成员范围找
    3.如果都没有报错
  • 父类
package ceshi;

public class Fu {
    public void show(){
        System.out.println("Fu中show方法调用");
    }
}
  • 子类
package ceshi;

public class Zi extends Fu{
    public void method() {
        super.show();
        System.out.println("Zi中method方法被调用");
    }
}

1.7 方法重写

  • 概述:子类中出现了和父类一模一样的方法声明
  • 应用:当子类需要父类的功能,而功能主体子类有自己特有的内容时,可以重写父类。沿袭父类的功能,又有自己特有的功能
  • @Override:重写方法上面加上 @Override 注解,可以帮助我们检测重写方法申明的正确性
  • 快捷键 :在继承父类的子类中,写下父类方法名,按下回车,会自动补全重写方法体
  • 范例:手机类和新手机类
  • 手机类
package ceshi;

public class Phone {
    public void call(String name) {
        System.out.println("给"+name+"打电话");
    }
}
  • 新手机类
public class NewPhone extends Phone{
    @Override
    public void call(String name) {
        System.out.println("开启视频");
//        System.out.println("给"+name+"打电话");
        super.call(name);
    }
}

1.8 方法重写注意事项

  • 1、私有方法不能被重写,父私有成员子不能继承(private修饰的)
  • 2、子类方法访问权限不能更低(public>默认>私有=)
  • 父类
package ceshi;

public class Fu {
    private void show() {
        System.out.println("Fu中show方法被调用");
    }

    public void method() {
        System.out.println("Fu中method方法被调用");
    }

}
  • 子类
package ceshi;

public class Zi extends Fu{
    /*@Override //报错,私有方法不能被继承
    private void show() {
        System.out.println("Zi中show方法被调用");
    }*/

    void method() { //报错,访问权限低于public,把父类public去掉就可以
        System.out.println("Fu中method方法被调用");
    }
}

1.9 Java中继承的注意事项

  • Java中类只支持单继承(只继承一个类),不支持多继承
  • Java中支持多层继承(C继承B,B继承A)
    在这里插入图片描述
    在这里插入图片描述
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。