Java——继承

简介: Java——继承!

1. 继承

1.1 继承概述

在这里插入图片描述

继承是面向对象三大特征之一,可以使得子类具有父类的属性和方法,还可以在子类中重新定义,追加属性和方法。

继承的格式:

格式:publicclass子类名extends父类名()
范例:publicclassZiextendsFu()

Fu:父类,也为基类、超类;

Zi:子类,也为派生类。

继承中子类的特点:

(1)子类可以有父类的内容;

(2)子类中有自己特有的内容

packagecom.extendss;
publicclassFu {
publicvoidshow(){
System.out.println("show方法被调用");
    }
}


packagecom.extendss;
publicclassZiextendsFu{
publicvoidmethond(){
System.out.println("methondffbdy");
    }
}
packagecom.extendss;
/*test*/publicclassDemo {
publicstaticvoidmain(String[] args) {
Fuf=newFu();
f.show();
Ziz=newZi();
z.methond();
z.show();
    }
}


show方法被调用methondffbdyshow方法被调用


1.2 继承的好处和弊端

优:

(1)提高了代码的**复用性**(多个类相同的成员可以放在同一个类中)

(2)提高了代码的**维护性**(如果方法的代码需要被修改,修改一处即可)

缺:

继承让类与类之间产生了关系,类的耦合性增强了,当父类发生变化时子类实现也不得不跟着变化,削弱了子类的独立性;

什么时候使用继承?

继承体现的关系:is a

在这里插入图片描述


1.3 继承中变量的访问特点

在子类中访问一个变量:

(1)子类局部范围找;

(2)子类成员范围找;

(3)父类成员范围找;

(4)如果都没有报错。


1.4 super

super关键字用法和this关键字用法相似。

this:代表本类对象的引用;

super:代表父类存储空间的标识(可理解为父类对象引用)

在这里插入图片描述

packagecom.extendss;
publicclassFu {
publicintage=40;
}

packagecom.extendss;
publicclassZiextendsFu{
publicintage=20;
publicvoidshow(){
intage=30;
System.out.println(age);
//访问本类的成员变量System.out.println(this.age);
//访问父类的成员变量System.out.println(super.age);
    }
}


packagecom.extendss;
/*test*/publicclassDemo {
publicstaticvoidmain(String[] args) {
Ziz=newZi();
z.show();
    }
}

302040

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

子类中所有的构造方法默认都会访问父类中无参构造方法。

(1)因为子类会继承父类中的数据,可能还会使用父类的数据,所以,子类初始化前,一定要先完成父类数据得到初始化;

(2)每一个子类构造方法的第一条语句默认都是:super()。

packagecom.extendss;
publicclassFu {
publicFu(){
System.out.println("Fu中无参构造方法被调用");
    }
publicFu(intage){
System.out.println("Fu中带参构造方法被调用");
    }
}


packagecom.extendss;
publicclassZiextendsFu{
publicZi(){
//super();System.out.println("Zi中无参构造方法被调用");
    }
publicZi(intage){
//super();System.out.println("Zi中带参构造方法被调用");
    }
}

packagecom.extendss;
/*test*/publicclassDemo {
publicstaticvoidmain(String[] args) {
Ziz=newZi();
Ziz2=newZi(20);
    }
}


Fu中无参构造方法被调用Zi中无参构造方法被调用Fu中无参构造方法被调用Zi中带参构造方法被调用

如果父类中没有无参构造方法:

(1)通过使用super关键字去显示的调用父类的带参构造方法;

(2)在父类中自己提供一个无参构造方法。【推荐】

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

通过子类对象访问一个方法:

(1)子类成员范围找;

(2)父类成员范围找;

(3)如果都没有就报错。

packagecom.extendss;
publicclassFu {
publicvoidshow(){
System.out.println("Fu中show()方法被调用");
    }
}


packagecom.extendss;
publicclassZiextendsFu{
publicvoidmethond(){
System.out.println("Zi中methond()方法被调用");
    }
publicvoidshow(){
super.show();
System.out.println("Zi中show()方法被调用");
    }
}


packagecom.extendss;
/*test*/publicclassDemo {
publicstaticvoidmain(String[] args) {
Ziz=newZi();
z.methond();
z.show();
    }
}

Zi中methond()方法被调用Fu中show()方法被调用Zi中show()方法被调用


1.7 方法重写

方法重写描述:

子类中出现了和父类中一模一样的方法声明。

方法重写的应用:

当子类需要父类的功能,而功能主体子类有自己特有内容时,可重写父类中的方法。这样,及沿袭了父类的功能,又定义了子类特有的内容。

@Override:

是一个注解;

可以帮助我们检查方法重写的方法声明的正确性。

1.8 方法重写注意事项

(1)私有方法不能被重写(父类私有成员子类是不能继承的)

(2)子类方法访问权限不能更低(public>默认>私有)

1.9 Java中继承的注意事项

(1)Java中类只支持单继承,不支持多继承;

(2)Java中类支持多层继承。

在这里插入图片描述

在这里插入图片描述


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