Java:继承

简介: Java继承的介绍

继承:定义一个类,让它成为某个类(一般叫父类)的子类,那么它就会继承父类里的部分属性和方法。因此,类的继承性使所建立的软件具有开放性、可扩充性,这是信息组织与分类的行之有效的方法,通过类的继承关系,使公共的特性能够共享,简化了对象、类的创建工作量,增加了代码的可重用性,复用性。

定义语法:
[类修饰符] class 子类名 extends 父类名 { 语句;}

public class Person{
    private String name ; //name属性私有化,无法在其他类进行访问或操作,所以不能继承
    protected String sex ;

    public String getName() {
        return name;
    }

    public void setName(String name) { 

        this.name = name;
    } }
//extends关键字作用为一个子类指定父类的实现,即student类继承了Person类。
public class student extends Person
{} 

image.png

1、在java中,java.lang.Object 类是所有java类的最高层父类,是唯一一个没有父类的类:
如果在类的声明中未使用extends 关键字指明其父类,则默认父类为Object 类。java中的类的继承关系形成了以Object 类为树根的树状层次结构。

2、如果两个类存在继承关系,则子类会自动继承父类的部分方法和变量,在子类中可以对其调用。在java中,只允许单继承,即 一个类只能继承一个父类,但可以拥有多个子类。

(1) 子类继承父类的成员变量
image.png

1)能够继承父类的public和protected成员变量;不能够继承父类的private成员变量;
2)对于子类可以继承的父类成员变量,如果在子类中出现了同名称的成员变量,则会发生隐藏现象,即子类的成员变量会屏蔽掉父类的同名成员变量。如果要在子类中访问父类中同名成员变量,需要使用super关键字来进行引用。

public class Person{
    protected String sex = "男" ;
}
//extends关键字作用为一个子类指定父类的实现
public class student extends Person
{
    protected String sex = "女" ;  //继承Person类,出现同名称成员变量
}

结果显示:(隐藏现象)
image.png

 若要获取父类的成员变量,则:

public class student extends Person
{
    private String sex = "女" ; //私有化属性
    public String getSex() //创建方法在其他类调用,用super.获取父类成员变量
    {return super.sex;}
}

image.png

(2) 子类继承父类的方法
1)能够继承父类的public和protected成员方法;不能够继承父类的private成员方法;
2)对于子类可以继承的父类成员方法,如果在子类中出现了同名称且同参数的成员方法(又叫子类重写父类的方法),则称为覆盖,即子类的成员方法会覆盖掉父类的同名成员方法。如果要在子类中访问父类中同名成员方法,需要使用super关键字来进行引用。

public class Person{
    public void setName() {
        System.out.println("父类的方法被调用!");
    } }
public class student extends Person {
    public void setName() {
        System.out.println("子类的方法被调用!");
    } }
public class test {
    public static void main(String[] args)
    {
        student student = new student();
        student.setName();
    } }

image.png

若要获取父类的成员方法,则:

public class student extends Person {
    public void setName() {

        super.setName();  // 在同名成员方法中,用super.获取父类的成员方法
        System.out.println("子类的方法被调用!");
    } }

image.png
隐藏和覆盖的区别是:隐藏是针对成员变量和静态方法的,而覆盖是针对普通方法的。

3、子类是不能够继承父类的构造函数的,但是,如果父类的构造函数都是带有参数的,则必须在子类的构造函数中用super关键字调用父类的构造函数并配以适当的参数列表。如果父类有无参构造函数,则在子类的构造函数中,系统会自动调用父类的无参构造函数。

public class Person{
    private String name ;
    private int age ;

    public Person(String name , int age)
    {
        this.name = name ;
        this.age = age ;
    }

    public String toString() {
        return "name=" + name + ", age=" + age + "";
    }}
public class student extends Person {
    public student(String name , int age)
    {
        super("小明",18);
    }}

image.png

4、super关键字表示父类,主要有两种用法:
1)super.menber; (用于在子类中调用父类的同名成员变量或者方法)
2)super([args]); (用于调用父类的构造函数,args表示参数,且要在子类构造函数的第一个语句)

目录
相关文章
|
3月前
|
Java 程序员
Java中的继承和多态:理解面向对象编程的核心概念
【8月更文挑战第22天】在Java的世界中,继承和多态不仅仅是编程技巧,它们是构建可维护、可扩展软件架构的基石。通过本文,我们将深入探讨这两个概念,并揭示它们如何共同作用于面向对象编程(OOP)的实践之中。你将了解继承如何简化代码重用,以及多态如何为程序提供灵活性和扩展性。让我们启程,探索Java语言中这些强大特性的秘密。
|
6天前
|
Java 开发者
在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口
【10月更文挑战第20天】在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口。本文揭示了这两种方式的微妙差异和潜在陷阱,帮助你更好地理解和选择适合项目需求的线程创建方式。
11 3
|
6天前
|
Java
在Java多线程编程中,实现Runnable接口通常优于继承Thread类
【10月更文挑战第20天】在Java多线程编程中,实现Runnable接口通常优于继承Thread类。原因包括:1) Java只支持单继承,实现接口不受此限制;2) Runnable接口便于代码复用和线程池管理;3) 分离任务与线程,提高灵活性。因此,实现Runnable接口是更佳选择。
18 2
|
6天前
|
Java
Java中多线程编程的基本概念和创建线程的两种主要方式:继承Thread类和实现Runnable接口
【10月更文挑战第20天】《JAVA多线程深度解析:线程的创建之路》介绍了Java中多线程编程的基本概念和创建线程的两种主要方式:继承Thread类和实现Runnable接口。文章详细讲解了每种方式的实现方法、优缺点及适用场景,帮助读者更好地理解和掌握多线程编程技术,为复杂任务的高效处理奠定基础。
15 2
|
6天前
|
Java 开发者
Java多线程初学者指南:介绍通过继承Thread类与实现Runnable接口两种方式创建线程的方法及其优缺点
【10月更文挑战第20天】Java多线程初学者指南:介绍通过继承Thread类与实现Runnable接口两种方式创建线程的方法及其优缺点,重点解析为何实现Runnable接口更具灵活性、资源共享及易于管理的优势。
16 1
|
2月前
|
Java 编译器
封装,继承,多态【Java面向对象知识回顾①】
本文回顾了Java面向对象编程的三大特性:封装、继承和多态。封装通过将数据和方法结合在类中并隐藏实现细节来保护对象状态,继承允许新类扩展现有类的功能,而多态则允许对象在不同情况下表现出不同的行为,这些特性共同提高了代码的复用性、扩展性和灵活性。
封装,继承,多态【Java面向对象知识回顾①】
|
17天前
|
Java 测试技术 编译器
Java零基础-继承详解!
【10月更文挑战第4天】Java零基础教学篇,手把手实践教学!
19 2
|
21天前
|
Java 编译器
在Java中,关于final、static关键字与方法的重写和继承【易错点】
在Java中,关于final、static关键字与方法的重写和继承【易错点】
19 5
|
21天前
|
Java
java继承和多态详解
java继承和多态详解
35 5
|
21天前
|
Java 编译器
【一步一步了解Java系列】:子类继承以及代码块的初始化
【一步一步了解Java系列】:子类继承以及代码块的初始化
20 3