Java 继承详解下

简介: Java 继承详解下

一、super的使用

如果子类中存在与父类中相同的成员时,那如何在子类中访问父类相同名称的成员呢?
可以使用super关键字进行访问.

4.1 访问父类的成员

class Father {
    int a;
    int b;
}
class Son extends Father {
    int a;
    int b;
    int c;
    public void func() {
        super.a = 10;
        super.b = 20;
        c = 30;
    }
}

4.2 访问父类的方法

class Father {
    public void func1() {
        System.out.println("Father: func1");
    }
}
class Son extends Father {
    public void func1() {
        System.out.println("Son: func1");
    }
    public void func2() {
        System.out.println("Son: func2");
    }
    public void func3() {
        super.func1();
        func2();
    }
}

注意:
1.super只能在非静态方法中使用
2.在子类方法中,访问父类的成员变量和方法

4.3 子类构造方法

在生成子类对象时,会先调用父类的构造方法,在去执行子类的构造方法.一般没有写出来,系统会默认写入.

class Father {
    public Father() {
        System.out.println("Father!");
    }
}
class Son extends Father {
    public Son() {
        //super();
        System.out.println("Son!");
    }

    public static void main(String[] args) {
        Son son = new Son();
    }
}

在这里插入图片描述
这里验证了我们所说的,在实例子类对象时,会先调用父类的实例方法,然后在调用我们子类的实例方法,在子类的构造方法默认有一个super()方法去调用父类的构造方法,如果我们自己写的父类的构造方法是带参数的,我们但自己在子类构造方法第一行写super(参数)不然会编译报错.

4.4 super和this

1.super是一个关键字,代表父类的存储空间标识。(可以理解为父亲的引用)
2.super和this的用法相似。
3.this代表对象的引用(谁调用就代表谁);
4.super代表当前子类对父类的引用。
5.super();和this();都是在构造函数的第一行,不能同时出现。
==不同点==
1.成员变量

this.变量        本类的
super.变量       父类的

2.构造方法

this(...)        本类的
super(...)       父类的

3.成员方法

this.方法名()        本类的    
super.方法名()       父类的

4.5 继承代码块执行顺序

1.父类静态代码块优先执行,然后子类静态代码块执行,静态代码块只执行一次
2.在实例子类对象时,父类实例代码块和父类构造方法紧接着执行.
3.子类的实例代码块和子类构造方法再执行

二、组合

5.1 final关键字

1.final修饰变量表示常量,不能再修改(常量书写默认为单词的大写)

final int COUNT = 0;
COUNT = 10;//编译错误

2.final修饰类表示该类不能在被继承

final class Father {

}
class Son extends Father {

}

在这里插入图片描述
3.final修饰的方法不能够重写

5.2 组合

组合表示的是:对象之间存在has的关系,其中一个类是其他几个类的组合.
在这里插入图片描述

class Tire {

}
class Engine {

}
class VehicleSystem {

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